aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sound/mixer.cpp7
-rw-r--r--sound/mixer.h5
2 files changed, 10 insertions, 2 deletions
diff --git a/sound/mixer.cpp b/sound/mixer.cpp
index 40f59714ab..8d452b4431 100644
--- a/sound/mixer.cpp
+++ b/sound/mixer.cpp
@@ -121,6 +121,7 @@ SoundMixer::SoundMixer() {
_musicVolume = 0;
_paused = false;
+ _channelsPaused = false;
for (i = 0; i != NUM_CHANNELS; i++)
_channels[i] = NULL;
@@ -237,7 +238,7 @@ void SoundMixer::mix(int16 *buf, uint len) {
memset(buf, 0, 2 * len * sizeof(int16));
}
- if (!_paused) {
+ if (!_paused && !_channelsPaused) {
// now mix all channels
for (int i = 0; i != NUM_CHANNELS; i++)
if (_channels[i])
@@ -314,6 +315,10 @@ void SoundMixer::pause(bool paused) {
_paused = paused;
}
+void SoundMixer::pauseChannels(bool paused) {
+ _channelsPaused = paused;
+}
+
bool SoundMixer::hasActiveSFXChannel() {
// FIXME/TODO: We need to distinguish between SFX and music channels
// (and maybe also voice) here to work properly in iMuseDigital
diff --git a/sound/mixer.h b/sound/mixer.h
index 2993b5416b..e90218b11d 100644
--- a/sound/mixer.h
+++ b/sound/mixer.h
@@ -73,7 +73,7 @@ private:
int _globalVolume;
int _musicVolume;
- bool _paused;
+ bool _paused, _channelsPaused;
Channel *_channels[NUM_CHANNELS];
@@ -127,6 +127,9 @@ public:
/** pause - unpause */
void pause(bool paused);
+ /** pause - unpause channels, keep adlib music running */
+ void pauseChannels(bool paused);
+
/** set the global volume, 0-256 */
void setVolume(int volume);