diff options
author | Filippos Karapetis | 2015-07-09 11:53:08 +0300 |
---|---|---|
committer | Filippos Karapetis | 2015-07-09 11:53:08 +0300 |
commit | a620632a5f9dd97db3c0a2f5a44a2fe8ff41809a (patch) | |
tree | d9ab28629e9f3540275ea197d3f1b041dd44307c | |
parent | dbc8d3c530dd12cbe2cea4d9099f0ec05fedf6d0 (diff) | |
download | scummvm-rg350-a620632a5f9dd97db3c0a2f5a44a2fe8ff41809a.tar.gz scummvm-rg350-a620632a5f9dd97db3c0a2f5a44a2fe8ff41809a.tar.bz2 scummvm-rg350-a620632a5f9dd97db3c0a2f5a44a2fe8ff41809a.zip |
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
-rw-r--r-- | engines/access/sound.cpp | 12 |
1 files changed, 5 insertions, 7 deletions
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<RoomInfo::SoundIdent> &sounds) { void SoundManager::stopSound() { debugC(3, kDebugSound, "stopSound"); - _mixer->stopHandle(Audio::SoundHandle()); + _mixer->stopHandle(_effectsHandle); } void SoundManager::freeSounds() { |