diff --git a/src/sdl/mixer_sound.c b/src/sdl/mixer_sound.c index ddbc809d2..8bfd1b8a2 100644 --- a/src/sdl/mixer_sound.c +++ b/src/sdl/mixer_sound.c @@ -486,6 +486,8 @@ void I_ShutdownMusic(void) void I_PauseSong(INT32 handle) { (void)handle; + if(!midimode) + Mix_UnregisterEffect(MIX_CHANNEL_POST, count_music_bytes); Mix_PauseMusic(); songpaused = true; } @@ -493,6 +495,14 @@ void I_PauseSong(INT32 handle) void I_ResumeSong(INT32 handle) { (void)handle; + if(!midimode) + { + while(Mix_UnregisterEffect(MIX_CHANNEL_POST, count_music_bytes) != 0) { } + // HACK: fixes issue of multiple effect callbacks being registered + if(music && !Mix_RegisterEffect(MIX_CHANNEL_POST, count_music_bytes, NULL, NULL)) + // midimode and music must be checked in case nothing is actually playing + CONS_Alert(CONS_WARNING, "Error registering SDL music position counter: %s\n", Mix_GetError()); + } Mix_ResumeMusic(); songpaused = false; }