From: Holger Schemel Date: Sat, 27 Jan 2018 19:58:00 +0000 (+0100) Subject: added workaround for broken MIDI volume behaviour for Windows platform X-Git-Tag: 4.0.1.1~11 X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=commitdiff_plain;h=ae22060f6dbc84e9fe7f4ea6a8d2e29cc9c311dd;hp=3e260bd26ec0df0531a83f1323178743f641187d added workaround for broken MIDI volume behaviour for Windows platform playing MIDI music is broken since Windows Vista, as it sets the volume for MIDI music also for all other sounds and music, which cannot be set back to normal unless playing MIDI music again with that desired volume (more details: https://www.artsoft.org/forum/viewtopic.php?f=7&t=2253) => workaround 1: always play MIDI music with maximum volume => workaround 2: never fade MIDI music to lower volume, but just stop it --- diff --git a/src/libgame/sound.c b/src/libgame/sound.c index cb788e7e..8371b9b5 100644 --- a/src/libgame/sound.c +++ b/src/libgame/sound.c @@ -225,6 +225,16 @@ static void Mixer_PlayMusicChannel() // (this may happen when switching on music while playing the game) Mix_VolumeMusic(mixer[audio.music_channel].volume); Mix_FadeInMusic(mixer[audio.music_channel].data_ptr, -1, 100); + +#if defined(PLATFORM_WIN32) + // playing MIDI music is broken since Windows Vista, as it sets the volume + // for MIDI music also for all other sounds and music, which cannot be set + // back to normal unless playing MIDI music again with that desired volume + // (more details: https://www.artsoft.org/forum/viewtopic.php?f=7&t=2253) + // => workaround: always play MIDI music with maximum volume + if (Mix_GetMusicType(NULL) == MUS_MID) + Mix_VolumeMusic(SOUND_MAX_VOLUME); +#endif } } @@ -264,6 +274,16 @@ static void Mixer_FadeMusicChannel() Mix_FadeOutMusic(SOUND_FADING_INTERVAL); +#if defined(PLATFORM_WIN32) + // playing MIDI music is broken since Windows Vista, as it sets the volume + // for MIDI music also for all other sounds and music, which cannot be set + // back to normal unless playing MIDI music again with that desired volume + // (more details: https://www.artsoft.org/forum/viewtopic.php?f=7&t=2253) + // => workaround: never fade MIDI music to lower volume, but just stop it + if (Mix_GetMusicType(NULL) == MUS_MID) + Mixer_StopMusicChannel(); +#endif + setString(¤tly_playing_music_filename, NULL); }