Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/base/StarMixer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/base/StarMixer.cpp')
-rw-r--r--source/base/StarMixer.cpp13
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) {