コード例 #1
0
ファイル: digi.c プロジェクト: osgcc/descent-mac
void digi_set_max_channels(int n)
{
	OSErr err;
	song_resource *song;
	
	digi_max_channels	= n;

	if ( digi_max_channels < 1 ) 
		digi_max_channels = 1;
	if ( digi_max_channels > MAX_SOUND_CHANNELS ) 
		digi_max_channels = MAX_SOUND_CHANNELS;

	if ( !digi_initialized ) return;

	if (digi_midi_song_playing)
		digi_stop_current_song();

	if (midi_volume <= 0)
		ChangeSystemVoices(0, digi_max_channels/2, digi_max_channels);
	else
		ChangeSystemVoices(MAX_MUSIC_CHANNELS, 4 + (digi_max_channels/2), digi_max_channels);
	
	if (digi_last_midi_song != 0)
		digi_play_midi_song(digi_last_midi_song, digi_last_midi_song_loop);

	digi_reset_digi_sounds();
}
コード例 #2
0
ファイル: digi.c プロジェクト: osgcc/descent-mac
void digi_set_midi_volume(int n)
{
	int old_volume = midi_volume;
	
	if (!digi_initialized) return;

	if (n < 0)
		midi_volume = 0;
	else if (n > 255)
		midi_volume = 255;
	else
		midi_volume = n;
	
#ifdef MAC_SHAREWARE
	SetSongVolume(midi_volume);
#else
	redbook_set_volume(midi_volume);
#endif
	
	if (!old_volume && midi_volume) {
#ifdef MAC_SHAREWARE
		ChangeSystemVoices(MAX_MUSIC_CHANNELS, 4 + (digi_max_channels/2), digi_max_channels);
#endif
		digi_play_midi_song(digi_last_midi_song, digi_last_midi_song_loop);
	} else if (old_volume && !midi_volume) {
		digi_stop_current_song();
#ifndef MAC_SHAREWARE
		digi_cd_started = 0;
#else
		ChangeSystemVoices(0, digi_max_channels/2, digi_max_channels);
#endif

	}
}
コード例 #3
0
ファイル: digi.c プロジェクト: btb/d2x
/* Shut down audio */
void digi_close()
{
	if (!Digi_initialized) return;

	digi_stop_current_song();

	Digi_initialized = 0;

#ifdef __MINGW32__
	SDL_Delay(500); // CloseAudio hangs if it's called too soon after opening?
#endif
	Mix_CloseAudio();
}
コード例 #4
0
ファイル: digi.c プロジェクト: osgcc/descent-mac
void digi_play_midi_song(int songnum, int loop )
{
	OSErr err;
	song_resource *song;
	ushort midi_id;

	if (!digi_initialized) return;

	digi_last_midi_song = songnum;
	digi_last_midi_song_loop = loop;

#ifndef MAC_SHAREWARE
	if ( !have_descent_cd ) {
		if ( !cd_playing && !digi_cd_started )
			redbook_start_play();
		digi_cd_started = 1;
		return;
	}
#endif

	digi_stop_current_song();
	
	if (midi_volume < 1)
		return;

#ifdef MAC_SHAREWARE
	Song_handle = GetResource('SONG', songnum);
	if (!Song_handle)
		return;
	song = (song_resource *)(*Song_handle);
	midi_id = song->midi_id;
	Midi_handle = GetResource('Midi', midi_id);
	if (!Midi_handle) {
		ReleaseResource(Song_handle);
		return;
	}
	song->sound_voices = digi_max_channels;
	song->norm_voices = 4 + (digi_max_channels/2);
	err = BeginSongFromMemory(songnum, Song_handle, Midi_handle, loop);
	if (err != noErr)
		return;
#else
	play_redbook_track(songnum, loop);
#endif
	digi_midi_song_playing = 1;
	
}
コード例 #5
0
ファイル: digi.c プロジェクト: Ringdingcoder/d1x
void digi_play_midi_song( char * filename, char * melodic_bank, char * drum_bank, int loop )
{       
	if (!digi_initialised) return;

        digi_stop_current_song();

       //added on 5/20/99 by Victor Rachels to fix crash/etc
        if(filename == NULL) return;
        if(midi_volume < 1) return;
       //end this section addition - VR

	if ((hmp = hmp_open(filename))) {
	    hmp_play(hmp);
	    digi_midi_song_playing = 1;
	    digi_set_midi_volume(midi_volume);
	}
	else
		printf("hmp_open failed\n");
}
コード例 #6
0
ファイル: digi_audio.c プロジェクト: arbruijn/d1xnacl
void digi_audio_play_midi_song( char * filename, char * melodic_bank, char * drum_bank, int loop )
{
#ifdef _WIN32
	if (GameArg.SndNoMusic)
		return;

	digi_stop_current_song();

	if (filename == NULL)
		return;

	if ((hmp = hmp_open(filename)))
	{
		hmp_play(hmp,loop);
		digi_midi_song_playing = 1;
		digi_set_midi_volume(midi_volume);
	}
#endif
}
コード例 #7
0
ファイル: digi.c プロジェクト: osgcc/descent-mac
void digi_close()
{
	int i, sound_num;
	
	if (!digi_initialized)
		return;
	digi_stop_current_song();
	SetMasterVolume(master_save);

// free the sounds that we have registered.

	for (i = 0; i < num_sounds; i++) {
		sound_num = digi_xlat_sound(i);
		if (sound_num != -1)
			FreeSound(i);
	}
	ReleaseRegisteredSounds();
	FinisSoundMusicSystem();

	digi_initialized = 0;
}
コード例 #8
0
//stop any songs - midi or redbook - that are currently playing
void songs_stop_all(void)
{
	digi_stop_current_song();	// Stop midi song, if playing
	
	songs_stop_redbook();			// Stop CD, if playing
}