void PlayLevelSong( int levelnum ) { int songnum; int n_tracks; int bD1Song = (gameData.missions.list[gameData.missions.nCurrentMission].descent_version == 1); Assert( levelnum != 0 ); if ( !gameData.songs.bInitialized ) songs_init(); SongsStopAll(); nCurrentLevelSong = levelnum; songnum = (levelnum > 0) ? levelnum - 1 : -levelnum; gameStates.sound.nCurrentSong = songnum; if (!RBAEnabled() && gameStates.sound.bRedbookEnabled && gameOpts->sound.bUseRedbook) reinit_redbook(); if (force_rb_register) { RBARegisterCD(); //get new track list for new CD force_rb_register = 0; } if (gameStates.sound.bRedbookEnabled && RBAEnabled() && (n_tracks = RBAGetNumberOfTracks()) > 1) { //try to play redbook play_redbook_track(REDBOOK_FIRST_LEVEL_TRACK + (songnum % (n_tracks-REDBOOK_FIRST_LEVEL_TRACK+1)),1); } if (! gameStates.sound.bRedbookPlaying) { //not playing redbook, so play midi songnum = gameData.songs.nLevelSongs [bD1Song] ? gameData.songs.nFirstLevelSong [bD1Song] + (songnum % gameData.songs.nLevelSongs [bD1Song]) : 0; gameStates.sound.nCurrentSong = songnum; DigiPlayMidiSong( gameData.songs.info [songnum].filename, gameData.songs.info [songnum].melodic_bank_file, gameData.songs.info [songnum].drum_bank_file, 1, bD1Song); } }
//returns 1 if track started sucessfully //start at tracknum. if keep_playing set, play to end of disc. else //play only specified track int play_redbook_track(int tracknum,int keep_playing) { gameStates.sound.bRedbookPlaying = 0; #ifdef _DEBUG tracknum = 1; #endif if (!RBAEnabled() && gameStates.sound.bRedbookEnabled && !gameOpts->sound.bUseRedbook) reinit_redbook(); if (force_rb_register) { RBARegisterCD(); //get new track list for new CD force_rb_register = 0; } if (gameStates.sound.bRedbookEnabled && RBAEnabled()) { int num_tracks = RBAGetNumberOfTracks(); if (tracknum <= num_tracks) if (RBAPlayTracks(tracknum,keep_playing?num_tracks:tracknum)) { gameStates.sound.bRedbookPlaying = tracknum; } } return (gameStates.sound.bRedbookPlaying != 0); }
//returns 1 if track started sucessfully //start at tracknum. if keep_playing set, play to end of disc. else //play only specified track int play_redbook_track(int tracknum,int keep_playing) { Redbook_playing = 0; if (!RBAEnabled() && GameCfg.SndEnableRedbook) reinit_redbook(); if (GameCfg.SndEnableRedbook) { int num_tracks = RBAGetNumberOfTracks(); if (tracknum <= num_tracks) if (RBAPlayTracks(tracknum,keep_playing?num_tracks:tracknum)) { Redbook_playing = tracknum; } } return (Redbook_playing != 0); }
void songs_play_level_song( int levelnum ) { int songnum; int n_tracks; Assert( levelnum != 0 ); songs_init(); songs_stop_all(); if (cGameSongsAvailable < 1) return; current_song_level = levelnum; if (levelnum < 0) songnum = (-levelnum) % cGameSongsAvailable; else songnum = (levelnum-1) % cGameSongsAvailable; if (!RBAEnabled() && GameCfg.SndEnableRedbook) // need this to determine if we currently have the official CD reinit_redbook(); n_tracks = RBAGetNumberOfTracks(); if (RBAEnabled() && GameCfg.SndEnableRedbook) { //try to play redbook play_redbook_track(REDBOOK_FIRST_LEVEL_TRACK + (songnum % (n_tracks-REDBOOK_FIRST_LEVEL_TRACK+1)),!songs_haved1_cd()); } if (! Redbook_playing) { //not playing redbook, so play midi songnum += SONG_LEVEL_MUSIC; digi_play_midi_song( Songs[songnum].filename, Songs[songnum].melodic_bank_file, Songs[songnum].drum_bank_file, 1 ); } }