示例#1
0
    //
    // Play
    //
    // Play a redbook track (request is wrapped, so returns track number started)
    //
    U32 Play(U32 newTrack)
    {
      if (initialized && driver)
      {
        // Get number of tracks on disc
        U32 count = AIL_redbook_tracks(driver);

        // Clip track into acceptable range
        if ((newTrack > count) || (newTrack < minTrack)) 
        {
          newTrack = minTrack;
        }

        // If we ended up with a valid track number, start it playing
        if (newTrack >= 1 && newTrack <= count)
        {
          U32 start, end;
    
          // Get track info
          AIL_redbook_track_info(driver, newTrack, &start, &end);

          // Start it playing
          AIL_redbook_play(driver, start, end);

          // Update our track count
          track = newTrack;

          // Set next scan to be just past when this track ends
          pollTime = AIL_ms_count() + (end - start) + POLL_ERROR;

          // We're rockin, so turn on track searching
          search = TRUE;
        }
        else
        {
          // Probably a data cd
          search = FALSE;

          // Stop cd playing
          Stop();
        }
      }

      return (track);
    }
示例#2
0
void SoundManager::StartMusic(const sint32 &InTrackNum)
{
	m_stopRedbookTemporarily = FALSE;

	if (!g_theProfileDB->IsUseRedbookAudio() || !c3files_HasCD()) return;

	if (m_noSound) return;

	if (m_usePlaySound) return;

	if (m_curTrack == -1) return;

#if defined(USE_SDL)
    if (!m_cdrom) {
        return;
    }

    CDstatus status = SDL_CDStatus(m_cdrom);

    if ((CD_ERROR == status) || (!CD_INDRIVE(status))) {
        return;
    }

	sint32 const numTracks = m_cdrom->numtracks;
#else
    if (!m_redbook) {
        return;
    }

	U32 status = AIL_redbook_status(m_redbook);

    if (status == REDBOOK_ERROR) {
        return;
    }
	
	if (AIL_redbook_track(m_redbook)) {
		AIL_redbook_stop(m_redbook);
	}

	sint32 const numTracks = AIL_redbook_tracks(m_redbook);
#endif

	if (numTracks <= s_startTrack) return;

	m_numTracks = numTracks;
	
	sint32 trackNum = InTrackNum;
	if (trackNum < 0) trackNum = 0;
	if (trackNum > m_numTracks) trackNum = m_numTracks;

	m_curTrack = trackNum;

#if defined(USE_SDL)
    SDL_CDPlayTracks(m_cdrom, trackNum, 0, 1, 0);
#else
	U32 start;
    U32 end;
	AIL_redbook_track_info(m_redbook, trackNum, &start, &end);

    // Why?
	TerminateAllSounds();

	AIL_redbook_play(m_redbook, start, end);
#endif
}