示例#1
0
文件: songs.c 项目: paud/d2x-xl
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);
	}
}
示例#2
0
文件: songs.c 项目: paud/d2x-xl
//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);
}
示例#3
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);
}
示例#4
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 );
	}
}