Avoid mixing silence to output

"Silence" being less than -100dB.
This commit is contained in:
Chris Robinson
2012-09-24 15:33:44 -07:00
parent 12327da4fe
commit 2ceea21f76
2 changed files with 15 additions and 1 deletions
+4
View File
@@ -100,9 +100,13 @@ void MixDirect_C(ALsource *Source, ALCdevice *Device, DirectParams *params,
}
for(c = 0;c < MaxChannels;c++)
{
if(DrySend[c] < 0.00001f)
continue;
for(pos = 0;pos < BufferSize;pos++)
DryBuffer[c][OutPos+pos] += data[pos]*DrySend[c];
}
pos = BufferSize;
if(OutPos+pos == SamplesToDo)
{
for(c = 0;c < MaxChannels;c++)
+11 -1
View File
@@ -156,7 +156,12 @@ void MixDirect_SSE(ALsource *Source, ALCdevice *Device, DirectParams *params,
}
for(c = 0;c < MaxChannels;c++)
{
const __m128 gain = _mm_set1_ps(DrySend[c]);
__m128 gain;
if(DrySend[c] < 0.00001f)
continue;
gain = _mm_set1_ps(DrySend[c]);
for(pos = 0;pos < BufferSize-3;pos += 4)
{
const __m128 val4 = _mm_load_ps(&data[pos]);
@@ -165,15 +170,20 @@ void MixDirect_SSE(ALsource *Source, ALCdevice *Device, DirectParams *params,
_mm_store_ps(&DryBuffer[c][OutPos+pos], dry4);
}
}
pos = BufferSize&~3;
if(pos < BufferSize)
{
ALuint oldpos = pos;
for(c = 0;c < MaxChannels;c++)
{
if(DrySend[c] < 0.00001f)
continue;
pos = oldpos;
for(;pos < BufferSize;pos++)
DryBuffer[c][OutPos+pos] += data[pos]*DrySend[c];
}
pos = BufferSize;
}
if(OutPos+pos == SamplesToDo)
{