From a620632a5f9dd97db3c0a2f5a44a2fe8ff41809a Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Thu, 9 Jul 2015 11:53:08 +0300 Subject: ACCESS: Fix sound stream handling Fixes stopSound(), and changes all sound streams to be deleted on the next call of checkSoundQueue(), or when clearSounds() is called. This avoids ending up with invalidated sound streams in the sound queue --- engines/access/sound.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) (limited to 'engines/access/sound.cpp') diff --git a/engines/access/sound.cpp b/engines/access/sound.cpp index 61191aac25..95f8367b46 100644 --- a/engines/access/sound.cpp +++ b/engines/access/sound.cpp @@ -50,9 +50,6 @@ void SoundManager::clearSounds() { if (_mixer->isSoundHandleActive(_effectsHandle)) _mixer->stopHandle(_effectsHandle); - if (_queue.size()) - _queue.remove_at(0); - while (_queue.size()) { delete _queue[0]; _queue.remove_at(0); @@ -146,7 +143,7 @@ void SoundManager::playSound(Resource *res, int priority) { if (!_mixer->isSoundHandleActive(_effectsHandle)) _mixer->playStream(Audio::Mixer::kSFXSoundType, &_effectsHandle, _queue[0], -1, _mixer->kMaxChannelVolume, 0, - DisposeAfterUse::YES); + DisposeAfterUse::NO); } void SoundManager::checkSoundQueue() { @@ -155,12 +152,13 @@ void SoundManager::checkSoundQueue() { if (_queue.empty() || _mixer->isSoundHandleActive(_effectsHandle)) return; + delete _queue[0]; _queue.remove_at(0); - if (_queue.size()) + if (_queue.size() && _queue[0]) _mixer->playStream(Audio::Mixer::kSFXSoundType, &_effectsHandle, _queue[0], -1, _mixer->kMaxChannelVolume, 0, - DisposeAfterUse::YES); + DisposeAfterUse::NO); } bool SoundManager::isSFXPlaying() { @@ -181,7 +179,7 @@ void SoundManager::loadSounds(Common::Array &sounds) { void SoundManager::stopSound() { debugC(3, kDebugSound, "stopSound"); - _mixer->stopHandle(Audio::SoundHandle()); + _mixer->stopHandle(_effectsHandle); } void SoundManager::freeSounds() { -- cgit v1.2.3