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

summaryrefslogtreecommitdiff
path: root/source/base/StarMixer.cpp
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2023-07-12 22:16:12 +1000
committerKae <80987908+Novaenia@users.noreply.github.com>2023-07-12 22:16:12 +1000
commit40223a5090bf8a502094927da39fc96a5cfd5eae (patch)
tree01fc797ad3f45879d132de3063fe1cab3f554835 /source/base/StarMixer.cpp
parentcf09616b1b241635dae0648c544b4e8ff3e2bd72 (diff)
Initial work
Diffstat (limited to 'source/base/StarMixer.cpp')
-rw-r--r--source/base/StarMixer.cpp10
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