diff options
-rw-r--r-- | audio/mixer.cpp | 38 | ||||
-rw-r--r-- | audio/mixer.h | 16 | ||||
-rw-r--r-- | audio/mixer_intern.h | 2 |
3 files changed, 56 insertions, 0 deletions
diff --git a/audio/mixer.cpp b/audio/mixer.cpp index fb4fffb8d8..128224ae85 100644 --- a/audio/mixer.cpp +++ b/audio/mixer.cpp @@ -94,6 +94,13 @@ public: void setVolume(const byte volume); /** + * Gets the channel's own volume. + * + * @return volume + */ + byte getVolume(); + + /** * Sets the channel's balance setting. * * @param balance new balance @@ -101,6 +108,13 @@ public: void setBalance(const int8 balance); /** + * Gets the channel's balance setting. + * + * @return balance + */ + int8 getBalance(); + + /** * Notifies the channel that the global sound type * volume settings changed. */ @@ -342,6 +356,14 @@ void MixerImpl::setChannelVolume(SoundHandle handle, byte volume) { _channels[index]->setVolume(volume); } +byte MixerImpl::getChannelVolume(SoundHandle handle) { + const int index = handle._val % NUM_CHANNELS; + if (!_channels[index] || _channels[index]->getHandle()._val != handle._val) + return 0; + + return _channels[index]->getVolume(); +} + void MixerImpl::setChannelBalance(SoundHandle handle, int8 balance) { Common::StackLock lock(_mutex); @@ -352,6 +374,14 @@ void MixerImpl::setChannelBalance(SoundHandle handle, int8 balance) { _channels[index]->setBalance(balance); } +int8 MixerImpl::getChannelBalance(SoundHandle handle) { + const int index = handle._val % NUM_CHANNELS; + if (!_channels[index] || _channels[index]->getHandle()._val != handle._val) + return 0; + + return _channels[index]->getBalance(); +} + uint32 MixerImpl::getSoundElapsedTime(SoundHandle handle) { return getElapsedTime(handle).msecs(); } @@ -482,11 +512,19 @@ void Channel::setVolume(const byte volume) { updateChannelVolumes(); } +byte Channel::getVolume() { + return _volume; +} + void Channel::setBalance(const int8 balance) { _balance = balance; updateChannelVolumes(); } +int8 Channel::getBalance() { + return _balance; +} + void Channel::updateChannelVolumes() { // From the channel balance/volume and the global volume, we compute // the effective volume for the left and right channel. Note the diff --git a/audio/mixer.h b/audio/mixer.h index 1fbe265488..de709e13fe 100644 --- a/audio/mixer.h +++ b/audio/mixer.h @@ -211,6 +211,14 @@ public: virtual void setChannelVolume(SoundHandle handle, byte volume) = 0; /** + * Get the channel volume for the given handle. + * + * @param handle the sound to affect + * @return channel volume + */ + virtual byte getChannelVolume(SoundHandle handle) = 0; + + /** * Set the channel balance for the given handle. * * @param handle the sound to affect @@ -220,6 +228,14 @@ public: virtual void setChannelBalance(SoundHandle handle, int8 balance) = 0; /** + * Get the channel balance for the given handle. + * + * @param handle the sound to affect + * @return channel balance + */ + virtual int8 getChannelBalance(SoundHandle handle) = 0; + + /** * Get approximation of for how long the channel has been playing. */ virtual uint32 getSoundElapsedTime(SoundHandle handle) = 0; diff --git a/audio/mixer_intern.h b/audio/mixer_intern.h index a04eb55c5b..dc361ce560 100644 --- a/audio/mixer_intern.h +++ b/audio/mixer_intern.h @@ -105,7 +105,9 @@ public: virtual bool isSoundTypeMuted(SoundType type) const; virtual void setChannelVolume(SoundHandle handle, byte volume); + virtual byte getChannelVolume(SoundHandle handle); virtual void setChannelBalance(SoundHandle handle, int8 balance); + virtual int8 getChannelBalance(SoundHandle handle); virtual uint32 getSoundElapsedTime(SoundHandle handle); virtual Timestamp getElapsedTime(SoundHandle handle); |