void digi_mixer_play_midi_song(char * filename, char * melodic_bank, char * drum_bank, int loop ) { if (!digi_initialised) return; if (GameArg.SndNoMusic) return; mix_set_music_volume(midi_volume); oplmus_play(filename, melodic_bank, drum_bank, loop); #if 0 jukebox_load(); // update jukebox state // quick hack to check if filename begins with "game" -- MD2211 if (jukebox_is_loaded() && strstr(filename, "game") == filename) { // use jukebox jukebox_play(loop); } else { // standard song playback #ifdef _WIN32 if (!GameArg.SndExternalMusic) { if ((hmp = hmp_open(filename))) { hmp_play(hmp,loop); digi_midi_song_playing = 1; digi_set_midi_volume(midi_volume); } } else #endif mix_play_music(filename, loop); } #endif }
//takes volume in range 0..8 //NOTE that we do not check what is playing right now (except Redbook) This is because here we don't (want) know WHAT we're playing - let the subfunctions do it (i.e. digi_win32_set_music_volume() knows if a MIDI plays or not) void songs_set_volume(int volume) { #ifdef _WIN32 digi_win32_set_midi_volume(volume); #endif if (GameCfg.MusicType == MUSIC_TYPE_REDBOOK) { RBASetVolume(0); RBASetVolume(volume); } #ifdef USE_SDLMIXER mix_set_music_volume(volume); #endif }
void digi_mixer_set_midi_volume( int mvolume ) { #ifdef _WIN32 int mm_volume; if (mvolume < 0) midi_volume = 0; else if (mvolume > 127) midi_volume = 127; else midi_volume = mvolume; // scale up from 0-127 to 0-0xffff mm_volume = (midi_volume << 1) | (midi_volume & 1); mm_volume |= (mm_volume << 8); if (hmp) midiOutSetVolume((HMIDIOUT)hmp->hmidi, mm_volume | mm_volume << 16); #endif midi_volume = mvolume; if (!digi_initialised) return; mix_set_music_volume(mvolume); }