diff options
author | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-07-12 22:16:12 +1000 |
---|---|---|
committer | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-07-12 22:16:12 +1000 |
commit | 40223a5090bf8a502094927da39fc96a5cfd5eae (patch) | |
tree | 01fc797ad3f45879d132de3063fe1cab3f554835 /source/base/StarMixer.cpp | |
parent | cf09616b1b241635dae0648c544b4e8ff3e2bd72 (diff) |
Initial work
Diffstat (limited to 'source/base/StarMixer.cpp')
-rw-r--r-- | source/base/StarMixer.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/source/base/StarMixer.cpp b/source/base/StarMixer.cpp index 96705b0..7b8e338 100644 --- a/source/base/StarMixer.cpp +++ b/source/base/StarMixer.cpp @@ -221,7 +221,7 @@ void Mixer::stopAll(float rampTime) { p.first->stop(vel); } -void Mixer::read(int16_t* outBuffer, size_t frameCount) { +void Mixer::read(int16_t* outBuffer, size_t frameCount, ExtraMixFunction extraMixFunction) { // Make this method as least locky as possible by copying all the needed // member data before the expensive audio / effect stuff. unsigned sampleRate; @@ -326,7 +326,7 @@ void Mixer::read(int16_t* outBuffer, size_t frameCount) { m_mixBuffer[s * channels + c] = 0; } else { for (size_t c = 0; c < channels; ++c) - m_mixBuffer[s * channels + c] = m_mixBuffer[s * channels + c] * volume; + m_mixBuffer[s * channels + c] *= volume; } } } @@ -338,7 +338,8 @@ void Mixer::read(int16_t* outBuffer, size_t frameCount) { float vol = lerp((float)s / frameCount, beginVolume * groupVolume * audioStopVolBegin, endVolume * groupEndVolume * audioStopVolEnd); for (size_t c = 0; c < channels; ++c) { float sample = m_mixBuffer[s * channels + c] * vol * audioState.positionalChannelVolumes[c] * audioInstance->m_volume.value; - outBuffer[s * channels + c] = clamp(sample + outBuffer[s * channels + c], -32767.0f, 32767.0f); + int16_t& outSample = outBuffer[s * channels + c]; + outSample = clamp(sample + outSample, -32767.0f, 32767.0f); } } @@ -347,6 +348,9 @@ void Mixer::read(int16_t* outBuffer, size_t frameCount) { } } + if (extraMixFunction) + extraMixFunction(outBuffer, bufferSize, channels); + { MutexLocker locker(m_effectsMutex); // Apply all active effects |