aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2013-05-27 21:57:22 -0700
committerChris Robinson <[email protected]>2013-05-27 21:57:22 -0700
commit6556626055e9985251ebd782c8551839e6d67ac5 (patch)
tree49d8aa79dc8fc024fb7adc2abf5b61cced2f2fa6
parent59a38442acd9290f9bc95258bfcd854ad422c305 (diff)
Simplify and fix some filter gain calculations
-rw-r--r--Alc/ALu.c18
-rw-r--r--Alc/effects/equalizer.c10
2 files changed, 17 insertions, 11 deletions
diff --git a/Alc/ALu.c b/Alc/ALu.c
index 70b5c80a..57dfa30f 100644
--- a/Alc/ALu.c
+++ b/Alc/ALu.c
@@ -452,7 +452,7 @@ ALvoid CalcNonAttnSourceParams(ALsource *ALSource, const ALCcontext *ALContext)
}
{
- ALfloat gain = maxf(0.001f, DryGainHF);
+ ALfloat gain = maxf(0.001f, sqrtf(DryGainHF));
for(c = 0;c < num_channels;c++)
ALfilterState_setParams(&ALSource->Params.Direct.Filter[c],
ALfilterType_LowPass, gain,
@@ -460,7 +460,7 @@ ALvoid CalcNonAttnSourceParams(ALsource *ALSource, const ALCcontext *ALContext)
}
for(i = 0;i < NumSends;i++)
{
- ALfloat gain = maxf(0.001f, WetGainHF[i]);
+ 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,
@@ -901,13 +901,19 @@ ALvoid CalcSourceParams(ALsource *ALSource, const ALCcontext *ALContext)
ALSource->Params.Send[i].Gain = WetGain[i];
- ALfilterState_setParams(&ALSource->Params.Direct.Filter[0],
- ALfilterType_LowPass, maxf(0.001f, DryGainHF),
- (ALfloat)LOWPASSFREQREF/Frequency, 0.0f);
+ {
+ ALfloat gain = maxf(0.001f, sqrtf(DryGainHF));
+ ALfilterState_setParams(&ALSource->Params.Direct.Filter[0],
+ ALfilterType_LowPass, 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, maxf(0.001f, WetGainHF[i]),
+ ALfilterType_LowPass, gain,
(ALfloat)LOWPASSFREQREF/Frequency, 0.0f);
+ }
}
diff --git a/Alc/effects/equalizer.c b/Alc/effects/equalizer.c
index 9a1543e4..0a26cda7 100644
--- a/Alc/effects/equalizer.c
+++ b/Alc/effects/equalizer.c
@@ -123,27 +123,27 @@ static ALvoid ALequalizerState_Update(ALequalizerState *state, ALCdevice *device
ALfloat gain;
/* convert linear gains to filter gains */
- switch (it)
+ switch(it)
{
case 0: /* Low Shelf */
- gain = powf(10.0f, (20.0f * log10f(slot->EffectProps.Equalizer.LowGain)) / 40.0f);
+ gain = sqrtf(slot->EffectProps.Equalizer.LowGain);
filter_frequency = slot->EffectProps.Equalizer.LowCutoff;
type = ALfilterType_LowShelf;
break;
case 1: /* Peaking */
- gain = powf(10.0f, (20.0f * log10f(slot->EffectProps.Equalizer.Mid1Gain)) / 40.0f);
+ gain = sqrtf(slot->EffectProps.Equalizer.Mid1Gain);
filter_frequency = slot->EffectProps.Equalizer.Mid1Center;
bandwidth = slot->EffectProps.Equalizer.Mid1Width;
type = ALfilterType_Peaking;
break;
case 2: /* Peaking */
- gain = powf(10.0f, (20.0f * log10f(slot->EffectProps.Equalizer.Mid2Gain)) / 40.0f);
+ gain = sqrtf(slot->EffectProps.Equalizer.Mid2Gain);
filter_frequency = slot->EffectProps.Equalizer.Mid2Center;
bandwidth = slot->EffectProps.Equalizer.Mid2Width;
type = ALfilterType_Peaking;
break;
case 3: /* High Shelf */
- gain = powf(10.0f, (20.0f * log10f(slot->EffectProps.Equalizer.HighGain)) / 40.0f);
+ gain = sqrtf(slot->EffectProps.Equalizer.HighGain);
filter_frequency = slot->EffectProps.Equalizer.HighCutoff;
type = ALfilterType_HighShelf;
break;