Example #1
0
void SoundManager::TerminateMusic(void)
{
	if (!g_theProfileDB->IsUseRedbookAudio() || !c3files_HasCD()) return;

	if (m_noSound) return;

	if (m_usePlaySound) return;

#if !defined(USE_SDL)
	if (!m_redbook) return;
#else
    if (!m_cdrom) return;
#endif

	
	m_stopRedbookTemporarily = TRUE;

#if !defined(USE_SDL)
	if (AIL_redbook_track(m_redbook)) {		
		AIL_redbook_stop(m_redbook);
	}
#else
    CDstatus status = SDL_CDStatus(m_cdrom);

    if (CD_PLAYING == status) {
        SDL_CDStop(m_cdrom);
    }
#endif
}
Example #2
0
    //
    // Poll
    //
    // Poll the cd audio (used for proceeding to next track automatically)
    //
    void Poll()
    {
      if (initialized && driver)
      {
        U32 status;

        // Time to search
        if (search && (pollTime <= AIL_ms_count()))
        {
          // Read the status (this can be slow on some drives)
          switch (status = AIL_redbook_status(driver))
          {
            // Still playing a track
            case REDBOOK_PLAYING:
            {
              U32 curTrack, curPos, end;

              // Get current info
              curTrack = AIL_redbook_track(driver);
              curPos = AIL_redbook_position(driver);

              // Some systems will briefly report playing the NEXT track!
              if ((curTrack == track) && track && curPos)
              {
                // Get track info
                AIL_redbook_track_info(driver, track, NULL, &end);

                // Recalc the scan time
                pollTime = AIL_ms_count() + (end - curPos) + POLL_ERROR;
              }

              break;
            }

            // Finished playing track
            case REDBOOK_STOPPED:
              Play(track + 1);
              break;

            default :
              Stop();
              break;
          }
        }
      }    
    }
Example #3
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
}