Use 2 chained one-pole filters for the wet path

This commit is contained in:
Chris Robinson
2012-04-30 09:33:00 -07:00
parent aed35fd811
commit 010a66487d
3 changed files with 10 additions and 11 deletions
+2 -3
View File
@@ -308,8 +308,7 @@ ALvoid CalcNonAttnSourceParams(ALsource *ALSource, const ALCcontext *ALContext)
ALSource->Params.Direct.iirFilter.coeff = lpCoeffCalc(DryGainHF, cw);
for(i = 0;i < NumSends;i++)
{
/* We use a one-pole filter, so we need to take the squared gain */
ALfloat a = lpCoeffCalc(WetGainHF[i]*WetGainHF[i], cw);
ALfloat a = lpCoeffCalc(WetGainHF[i], cw);
ALSource->Params.Send[i].iirFilter.coeff = a;
}
}
@@ -762,7 +761,7 @@ ALvoid CalcSourceParams(ALsource *ALSource, const ALCcontext *ALContext)
ALSource->Params.Direct.iirFilter.coeff = lpCoeffCalc(DryGainHF, cw);
for(i = 0;i < NumSends;i++)
{
ALfloat a = lpCoeffCalc(WetGainHF[i]*WetGainHF[i], cw);
ALfloat a = lpCoeffCalc(WetGainHF[i], cw);
ALSource->Params.Send[i].iirFilter.coeff = a;
}
}
+6 -6
View File
@@ -350,16 +350,16 @@ static void MixSend_##sampler(ALsource *Source, ALuint sendidx, \
\
if(OutPos == 0) \
{ \
value = sampler(data + pos*NumChannels + i, NumChannels,frac); \
value = sampler(data + pos*NumChannels + i, NumChannels, frac); \
\
value = lpFilter1PC(WetFilter, i, value); \
value = lpFilter2PC(WetFilter, i, value); \
WetClickRemoval[0] -= value * WetSend; \
} \
for(BufferIdx = 0;BufferIdx < BufferSize;BufferIdx++) \
{ \
value = sampler(data + pos*NumChannels + i, NumChannels,frac); \
value = sampler(data + pos*NumChannels + i, NumChannels, frac); \
\
value = lpFilter1P(WetFilter, i, value); \
value = lpFilter2P(WetFilter, i, value); \
WetBuffer[OutPos] += value * WetSend; \
\
frac += increment; \
@@ -369,9 +369,9 @@ static void MixSend_##sampler(ALsource *Source, ALuint sendidx, \
} \
if(OutPos == SamplesToDo) \
{ \
value = sampler(data + pos*NumChannels + i, NumChannels,frac); \
value = sampler(data + pos*NumChannels + i, NumChannels, frac); \
\
value = lpFilter1PC(WetFilter, i, value); \
value = lpFilter2PC(WetFilter, i, value); \
WetPendingClicks[0] += value * WetSend; \
} \
OutPos -= BufferSize; \
+2 -2
View File
@@ -63,9 +63,9 @@ typedef struct SendParams {
* output buffer. */
ALfloat Gain;
/* A low-pass filter, using a one-pole filter. */
/* A low-pass filter, using 2 chained one-pole filters. */
FILTER iirFilter;
ALfloat history[MAXCHANNELS];
ALfloat history[MAXCHANNELS*2];
} SendParams;