aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--scumm/imuse_digi/dimuse_script.cpp1
-rw-r--r--sound/mixer.cpp4
-rw-r--r--sound/mixer.h3
3 files changed, 8 insertions, 0 deletions
diff --git a/scumm/imuse_digi/dimuse_script.cpp b/scumm/imuse_digi/dimuse_script.cpp
index 79446ea898..654645ff94 100644
--- a/scumm/imuse_digi/dimuse_script.cpp
+++ b/scumm/imuse_digi/dimuse_script.cpp
@@ -170,6 +170,7 @@ void IMuseDigital::flushTracks() {
track->stream->finish();
}
if (track->stream->endOfStream()
+ || _vm->_mixer->isPaused() // hack for paused SoundMixer
|| _vm->_insaneRunning) { // INSANE hack for sync timer mode
_vm->_mixer->stopHandle(track->handle);
delete track->stream;
diff --git a/sound/mixer.cpp b/sound/mixer.cpp
index 40dfe8b3be..adf92cbd10 100644
--- a/sound/mixer.cpp
+++ b/sound/mixer.cpp
@@ -134,6 +134,10 @@ SoundMixer::~SoundMixer() {
_syst->deleteMutex(_mutex);
}
+bool SoundMixer::isPaused() {
+ return _paused;
+}
+
void SoundMixer::setupPremix(PremixProc *proc, void *param) {
Common::StackLock lock(_mutex);
_premixParam = param;
diff --git a/sound/mixer.h b/sound/mixer.h
index 1ab0360b24..91b32ae152 100644
--- a/sound/mixer.h
+++ b/sound/mixer.h
@@ -145,6 +145,9 @@ public:
/** pause/unpause all channels */
void pauseAll(bool paused);
+ /** check if mixer is paused */
+ bool isPaused();
+
/** pause/unpause the sound with the given ID */
void pauseID(int id, bool paused);