diff options
Diffstat (limited to 'source/base/StarMixer.cpp')
-rw-r--r-- | source/base/StarMixer.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/source/base/StarMixer.cpp b/source/base/StarMixer.cpp index c38d17e..2ec6b9e 100644 --- a/source/base/StarMixer.cpp +++ b/source/base/StarMixer.cpp @@ -172,6 +172,8 @@ Mixer::Mixer(unsigned sampleRate, unsigned channels) { m_groupVolumes[MixerGroup::Effects] = {1.0f, 1.0f, 0}; m_groupVolumes[MixerGroup::Music] = {1.0f, 1.0f, 0}; m_groupVolumes[MixerGroup::Cinematic] = {1.0f, 1.0f, 0}; + + m_speed = 1.0f; } unsigned Mixer::sampleRate() const { @@ -203,6 +205,10 @@ bool Mixer::hasEffect(String const& effectName) { return m_effects.contains(effectName); } +void Mixer::setSpeed(float speed) { + m_speed = speed; +} + void Mixer::setVolume(float volume, float rampTime) { MutexLocker locker(m_mutex); m_volume.target = volume; @@ -259,6 +265,8 @@ void Mixer::read(int16_t* outBuffer, size_t frameCount, ExtraMixFunction extraMi for (size_t i = 0; i < bufferSize; ++i) outBuffer[i] = 0; + float speed = m_speed; + { MutexLocker locker(m_queueMutex); // Mix all active sounds @@ -288,6 +296,9 @@ void Mixer::read(int16_t* outBuffer, size_t frameCount, ExtraMixFunction extraMi ? approach(audioInstance->m_pitchMultiplierTarget, audioInstance->m_pitchMultiplier, audioInstance->m_pitchMultiplierVelocity * time) : audioInstance->m_pitchMultiplier; + if (audioInstance->m_mixerGroup == MixerGroup::Effects) + pitchMultiplier *= speed; + if (audioStopVolEnd == 0.0f && audioInstance->m_stopping) finished = true; @@ -461,7 +472,7 @@ void Mixer::setGroupVolume(MixerGroup group, float targetValue, float rampTime) } } -void Mixer::update(PositionalAttenuationFunction positionalAttenuationFunction) { +void Mixer::update(float dt, PositionalAttenuationFunction positionalAttenuationFunction) { { MutexLocker locker(m_queueMutex); eraseWhere(m_audios, [&](auto& p) { |