diff options
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 |