From b9fe553ff8977895e438e567847a942597104296 Mon Sep 17 00:00:00 2001 From: elasota Date: Sat, 10 Apr 2021 23:56:25 -0400 Subject: [PATCH] Improve mixer performance --- AerofoilSDL/GpAudioDriver_SDL2.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/AerofoilSDL/GpAudioDriver_SDL2.cpp b/AerofoilSDL/GpAudioDriver_SDL2.cpp index f05fae7..f79ed8e 100644 --- a/AerofoilSDL/GpAudioDriver_SDL2.cpp +++ b/AerofoilSDL/GpAudioDriver_SDL2.cpp @@ -633,6 +633,7 @@ void GpAudioDriver_SDL2::RefillMixChunk(GpAudioChannel_SDL2 *const*channels, siz m_mixChunkReadOffset = 0; int16_t *mixChunkStart = m_mixChunk + m_mixChunkReadOffset; + int16_t audioNormalizeShift = 0; for (size_t i = 0; i < numChannels; i++) { @@ -641,18 +642,25 @@ void GpAudioDriver_SDL2::RefillMixChunk(GpAudioChannel_SDL2 *const*channels, siz if (i == 0) { noAudio = false; + audioNormalizeShift = 0x80; for (size_t j = 0; j < samplesToFill; j++) - mixChunkStart[j] = (static_cast(audioMixBuffer[j]) - 0x80) * audioVolumeScale; + mixChunkStart[j] = static_cast(audioMixBuffer[j]); } else { + audioNormalizeShift += 0x80; for (size_t j = 0; j < samplesToFill; j++) - mixChunkStart[j] += (static_cast(audioMixBuffer[j]) - 0x80) * audioVolumeScale; + mixChunkStart[j] += static_cast(audioMixBuffer[j]); } } if (noAudio) memset(mixChunkStart, 0, samplesToFill * sizeof(mixChunkStart[0])); + else + { + for (size_t i = 0; i < samplesToFill; i++) + mixChunkStart[i] = (mixChunkStart[i] - audioNormalizeShift) * audioVolumeScale; + } }