diff options
author | Chris Robinson <[email protected]> | 2013-05-28 10:57:38 -0700 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2013-05-28 10:57:38 -0700 |
commit | 48aa1e10d64d7c62cab856a0c5d7f9e140efbd6b (patch) | |
tree | 737726d31ce2cee1b548108c41493c3b2451d57f | |
parent | 6556626055e9985251ebd782c8551839e6d67ac5 (diff) |
Use the high-shelf filter in place of low-pass
They effectively both work to lower (or raise) high frequencies. However, the
high-shelf performs better when gain=1.
-rw-r--r-- | Alc/ALu.c | 8 | ||||
-rw-r--r-- | Alc/effects/echo.c | 2 | ||||
-rw-r--r-- | Alc/effects/reverb.c | 2 | ||||
-rw-r--r-- | OpenAL32/Include/alFilter.h | 2 | ||||
-rw-r--r-- | OpenAL32/alFilter.c | 11 |
5 files changed, 6 insertions, 19 deletions
@@ -455,7 +455,7 @@ ALvoid CalcNonAttnSourceParams(ALsource *ALSource, const ALCcontext *ALContext) ALfloat gain = maxf(0.001f, sqrtf(DryGainHF)); for(c = 0;c < num_channels;c++) ALfilterState_setParams(&ALSource->Params.Direct.Filter[c], - ALfilterType_LowPass, gain, + ALfilterType_HighShelf, gain, (ALfloat)LOWPASSFREQREF/Frequency, 0.0f); } for(i = 0;i < NumSends;i++) @@ -463,7 +463,7 @@ ALvoid CalcNonAttnSourceParams(ALsource *ALSource, const ALCcontext *ALContext) ALfloat gain = maxf(0.001f, sqrtf(WetGainHF[i])); for(c = 0;c < num_channels;c++) ALfilterState_setParams(&ALSource->Params.Send[i].Filter[c], - ALfilterType_LowPass, gain, + ALfilterType_HighShelf, gain, (ALfloat)LOWPASSFREQREF/Frequency, 0.0f); } } @@ -904,14 +904,14 @@ ALvoid CalcSourceParams(ALsource *ALSource, const ALCcontext *ALContext) { ALfloat gain = maxf(0.001f, sqrtf(DryGainHF)); ALfilterState_setParams(&ALSource->Params.Direct.Filter[0], - ALfilterType_LowPass, gain, + ALfilterType_HighShelf, gain, (ALfloat)LOWPASSFREQREF/Frequency, 0.0f); } for(i = 0;i < NumSends;i++) { ALfloat gain = maxf(0.001f, sqrtf(WetGainHF[i])); ALfilterState_setParams(&ALSource->Params.Send[i].Filter[0], - ALfilterType_LowPass, gain, + ALfilterType_HighShelf, gain, (ALfloat)LOWPASSFREQREF/Frequency, 0.0f); } } diff --git a/Alc/effects/echo.c b/Alc/effects/echo.c index a45f3398..9d17ead0 100644 --- a/Alc/effects/echo.c +++ b/Alc/effects/echo.c @@ -104,7 +104,7 @@ static ALvoid ALechoState_Update(ALechoState *state, ALCdevice *Device, const AL state->FeedGain = Slot->EffectProps.Echo.Feedback; - ALfilterState_setParams(&state->Filter, ALfilterType_LowPass, + ALfilterState_setParams(&state->Filter, ALfilterType_HighShelf, 1.0f - Slot->EffectProps.Echo.Damping, (ALfloat)LOWPASSFREQREF/frequency, 0.0f); diff --git a/Alc/effects/reverb.c b/Alc/effects/reverb.c index 5d85ee7b..74f2368c 100644 --- a/Alc/effects/reverb.c +++ b/Alc/effects/reverb.c @@ -1095,7 +1095,7 @@ static ALvoid ALreverbState_Update(ALreverbState *State, ALCdevice *Device, cons freq_scale = Slot->EffectProps.Reverb.HFReference / frequency; else freq_scale = (ALfloat)LOWPASSFREQREF / frequency; - ALfilterState_setParams(&State->LpFilter, ALfilterType_LowPass, + ALfilterState_setParams(&State->LpFilter, ALfilterType_HighShelf, Slot->EffectProps.Reverb.GainHF, freq_scale, 0.0f); diff --git a/OpenAL32/Include/alFilter.h b/OpenAL32/Include/alFilter.h index dd5edbb9..f42747f2 100644 --- a/OpenAL32/Include/alFilter.h +++ b/OpenAL32/Include/alFilter.h @@ -16,8 +16,6 @@ ALfloat lpCoeffCalc(ALfloat g, ALfloat cw); typedef enum ALfilterType { - ALfilterType_LowPass, - ALfilterType_HighShelf, ALfilterType_LowShelf, ALfilterType_Peaking, diff --git a/OpenAL32/alFilter.c b/OpenAL32/alFilter.c index 550c99f5..5bef87fd 100644 --- a/OpenAL32/alFilter.c +++ b/OpenAL32/alFilter.c @@ -343,17 +343,6 @@ void ALfilterState_setParams(ALfilterState *filter, ALfilterType type, ALfloat g /* Calculate filter coefficients depending on filter type */ switch(type) { - case ALfilterType_LowPass: - alpha = sinf(w0) / 2.0f * sqrtf((gain + 1.0f/gain) * - (1.0f/0.75f - 1.0f) + 2.0f); - filter->b[0] = (1.0f - cosf(w0)) * 0.5f; - filter->b[1] = 1.0f - cosf(w0); - filter->b[2] = (1.0f - cosf(w0)) * 0.5f; - filter->a[0] = 1.0f + alpha; - filter->a[1] = -2.0f*cosf(w0); - filter->a[2] = 1.0f - alpha; - break; - case ALfilterType_HighShelf: alpha = sinf(w0) / 2.0f * sqrtf((gain + 1.0f/gain) * (1.0f/0.75f - 1.0f) + 2.0f); |