From 96540686597cb033281e98de79ddc9622e650057 Mon Sep 17 00:00:00 2001 From: md5 Date: Sun, 3 Apr 2011 14:33:06 +0300 Subject: SCI: Fixed bug #3266480 and partially fixed bug #3041738 Hopefully, this will fix some of the oddities happening because of music fading --- engines/sci/sound/music.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/engines/sci/sound/music.cpp b/engines/sci/sound/music.cpp index 0ed99c154b..8656203736 100644 --- a/engines/sci/sound/music.cpp +++ b/engines/sci/sound/music.cpp @@ -442,6 +442,25 @@ void SciMusic::soundPlay(MusicEntry *pSnd) { if (pSnd->pMidiParser) { Common::StackLock lock(_mutex); pSnd->pMidiParser->mainThreadBegin(); + + if (pSnd->status != kSoundPaused) { + // Stop any in progress music fading, as that will reset the + // volume of the sound channels that the faded song occupies.. + // Fixes bug #3266480 and partially fixes bug #3041738. + for (uint i = 0; i < playListCount; i++) { + // Is another MIDI song being faded? If yes, stop it + // immediately instead + if (_playList[i]->fadeStep && _playList[i]->pMidiParser) { + _playList[i]->status = kSoundStopped; + if (_soundVersion <= SCI_VERSION_0_LATE) + _playList[i]->isQueued = false; + _playList[i]->pMidiParser->stop(); + freeChannels(_playList[i]); + _playList[i]->fadeStep = 0; + } + } + } + pSnd->pMidiParser->tryToOwnChannels(); if (pSnd->status != kSoundPaused) pSnd->pMidiParser->sendInitCommands(); -- cgit v1.2.3