X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Flibgame%2Fsound.c;h=8371b9b5cd879d02b56fabe8ab4487faa2da3fe3;hp=cb788e7e573769a7efeec3e8ff1fbeaec7692fc3;hb=ae22060f6dbc84e9fe7f4ea6a8d2e29cc9c311dd;hpb=3e260bd26ec0df0531a83f1323178743f641187d 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); }