aboutsummaryrefslogtreecommitdiff
path: root/engines/access/sound.cpp
diff options
context:
space:
mode:
authorFilippos Karapetis2015-07-09 11:53:08 +0300
committerFilippos Karapetis2015-07-09 11:53:08 +0300
commita620632a5f9dd97db3c0a2f5a44a2fe8ff41809a (patch)
treed9ab28629e9f3540275ea197d3f1b041dd44307c /engines/access/sound.cpp
parentdbc8d3c530dd12cbe2cea4d9099f0ec05fedf6d0 (diff)
downloadscummvm-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
Diffstat (limited to 'engines/access/sound.cpp')
-rw-r--r--engines/access/sound.cpp12
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() {