mirror of
https://github.com/elasota/Aerofoil.git
synced 2025-09-23 23:00:42 +00:00
Improve mixer performance
This commit is contained in:
@@ -633,6 +633,7 @@ void GpAudioDriver_SDL2::RefillMixChunk(GpAudioChannel_SDL2 *const*channels, siz
|
|||||||
m_mixChunkReadOffset = 0;
|
m_mixChunkReadOffset = 0;
|
||||||
|
|
||||||
int16_t *mixChunkStart = m_mixChunk + m_mixChunkReadOffset;
|
int16_t *mixChunkStart = m_mixChunk + m_mixChunkReadOffset;
|
||||||
|
int16_t audioNormalizeShift = 0;
|
||||||
|
|
||||||
for (size_t i = 0; i < numChannels; i++)
|
for (size_t i = 0; i < numChannels; i++)
|
||||||
{
|
{
|
||||||
@@ -641,18 +642,25 @@ void GpAudioDriver_SDL2::RefillMixChunk(GpAudioChannel_SDL2 *const*channels, siz
|
|||||||
if (i == 0)
|
if (i == 0)
|
||||||
{
|
{
|
||||||
noAudio = false;
|
noAudio = false;
|
||||||
|
audioNormalizeShift = 0x80;
|
||||||
for (size_t j = 0; j < samplesToFill; j++)
|
for (size_t j = 0; j < samplesToFill; j++)
|
||||||
mixChunkStart[j] = (static_cast<int16_t>(audioMixBuffer[j]) - 0x80) * audioVolumeScale;
|
mixChunkStart[j] = static_cast<int16_t>(audioMixBuffer[j]);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
audioNormalizeShift += 0x80;
|
||||||
for (size_t j = 0; j < samplesToFill; j++)
|
for (size_t j = 0; j < samplesToFill; j++)
|
||||||
mixChunkStart[j] += (static_cast<int16_t>(audioMixBuffer[j]) - 0x80) * audioVolumeScale;
|
mixChunkStart[j] += static_cast<int16_t>(audioMixBuffer[j]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (noAudio)
|
if (noAudio)
|
||||||
memset(mixChunkStart, 0, samplesToFill * sizeof(mixChunkStart[0]));
|
memset(mixChunkStart, 0, samplesToFill * sizeof(mixChunkStart[0]));
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (size_t i = 0; i < samplesToFill; i++)
|
||||||
|
mixChunkStart[i] = (mixChunkStart[i] - audioNormalizeShift) * audioVolumeScale;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user