Use 2 chained one-pole filters for the wet path
This commit is contained in:
@@ -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
@@ -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; \
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user