diff options
-rw-r--r-- | sound/mixer.cpp | 7 | ||||
-rw-r--r-- | sound/mixer.h | 5 |
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); |