aboutsummaryrefslogtreecommitdiffstats
path: root/Alc
diff options
context:
space:
mode:
Diffstat (limited to 'Alc')
-rw-r--r--Alc/alu.cpp12
-rw-r--r--Alc/effects/distortion.cpp6
-rw-r--r--Alc/effects/echo.cpp2
-rw-r--r--Alc/effects/equalizer.cpp8
-rw-r--r--Alc/effects/modulator.cpp2
-rw-r--r--Alc/effects/reverb.cpp8
-rw-r--r--Alc/filters/biquad.h46
7 files changed, 39 insertions, 45 deletions
diff --git a/Alc/alu.cpp b/Alc/alu.cpp
index 2bdfd092..94ba3aa8 100644
--- a/Alc/alu.cpp
+++ b/Alc/alu.cpp
@@ -933,11 +933,9 @@ void CalcPanningAndFilters(ALvoice *voice, const ALfloat xpos, const ALfloat ypo
if(gainHF != 1.0f) voice->mDirect.FilterType |= AF_LowPass;
if(gainLF != 1.0f) voice->mDirect.FilterType |= AF_HighPass;
voice->mDirect.Params[0].LowPass.setParams(BiquadType::HighShelf,
- gainHF, hfScale, calc_rcpQ_from_slope(gainHF, 1.0f)
- );
+ gainHF, hfScale, BiquadFilter::rcpQFromSlope(gainHF, 1.0f));
voice->mDirect.Params[0].HighPass.setParams(BiquadType::LowShelf,
- gainLF, lfScale, calc_rcpQ_from_slope(gainLF, 1.0f)
- );
+ gainLF, lfScale, BiquadFilter::rcpQFromSlope(gainLF, 1.0f));
for(ALsizei c{1};c < num_channels;c++)
{
voice->mDirect.Params[c].LowPass.copyParamsFrom(voice->mDirect.Params[0].LowPass);
@@ -955,11 +953,9 @@ void CalcPanningAndFilters(ALvoice *voice, const ALfloat xpos, const ALfloat ypo
if(gainHF != 1.0f) voice->mSend[i].FilterType |= AF_LowPass;
if(gainLF != 1.0f) voice->mSend[i].FilterType |= AF_HighPass;
voice->mSend[i].Params[0].LowPass.setParams(BiquadType::HighShelf,
- gainHF, hfScale, calc_rcpQ_from_slope(gainHF, 1.0f)
- );
+ gainHF, hfScale, BiquadFilter::rcpQFromSlope(gainHF, 1.0f));
voice->mSend[i].Params[0].HighPass.setParams(BiquadType::LowShelf,
- gainLF, lfScale, calc_rcpQ_from_slope(gainLF, 1.0f)
- );
+ gainLF, lfScale, BiquadFilter::rcpQFromSlope(gainLF, 1.0f));
for(ALsizei c{1};c < num_channels;c++)
{
voice->mSend[i].Params[c].LowPass.copyParamsFrom(voice->mSend[i].Params[0].LowPass);
diff --git a/Alc/effects/distortion.cpp b/Alc/effects/distortion.cpp
index d2bcd018..7ef77c69 100644
--- a/Alc/effects/distortion.cpp
+++ b/Alc/effects/distortion.cpp
@@ -79,15 +79,13 @@ void DistortionState::update(const ALCcontext *context, const ALeffectslot *slot
*/
auto frequency = static_cast<ALfloat>(device->Frequency);
mLowpass.setParams(BiquadType::LowPass, 1.0f, cutoff / (frequency*4.0f),
- calc_rcpQ_from_bandwidth(cutoff / (frequency*4.0f), bandwidth)
- );
+ mLowpass.rcpQFromBandwidth(cutoff / (frequency*4.0f), bandwidth));
cutoff = props->Distortion.EQCenter;
/* Convert bandwidth in Hz to octaves. */
bandwidth = props->Distortion.EQBandwidth / (cutoff * 0.67f);
mBandpass.setParams(BiquadType::BandPass, 1.0f, cutoff / (frequency*4.0f),
- calc_rcpQ_from_bandwidth(cutoff / (frequency*4.0f), bandwidth)
- );
+ mBandpass.rcpQFromBandwidth(cutoff / (frequency*4.0f), bandwidth));
ALfloat coeffs[MAX_AMBI_CHANNELS];
CalcDirectionCoeffs({0.0f, 0.0f, -1.0f}, 0.0f, coeffs);
diff --git a/Alc/effects/echo.cpp b/Alc/effects/echo.cpp
index 9cd6fb87..158ab856 100644
--- a/Alc/effects/echo.cpp
+++ b/Alc/effects/echo.cpp
@@ -102,7 +102,7 @@ void EchoState::update(const ALCcontext *context, const ALeffectslot *slot, cons
const ALfloat gainhf{maxf(1.0f - props->Echo.Damping, 0.0625f)}; /* Limit -24dB */
mFilter.setParams(BiquadType::HighShelf, gainhf, LOWPASSFREQREF/frequency,
- calc_rcpQ_from_slope(gainhf, 1.0f));
+ mFilter.rcpQFromSlope(gainhf, 1.0f));
mFeedGain = props->Echo.Feedback;
diff --git a/Alc/effects/equalizer.cpp b/Alc/effects/equalizer.cpp
index e1524943..cc701e8d 100644
--- a/Alc/effects/equalizer.cpp
+++ b/Alc/effects/equalizer.cpp
@@ -123,22 +123,22 @@ void EqualizerState::update(const ALCcontext *context, const ALeffectslot *slot,
gain = maxf(sqrtf(props->Equalizer.LowGain), 0.0625f); /* Limit -24dB */
f0norm = props->Equalizer.LowCutoff/frequency;
mChans[0].filter[0].setParams(BiquadType::LowShelf, gain, f0norm,
- calc_rcpQ_from_slope(gain, 0.75f));
+ BiquadFilter::rcpQFromSlope(gain, 0.75f));
gain = maxf(props->Equalizer.Mid1Gain, 0.0625f);
f0norm = props->Equalizer.Mid1Center/frequency;
mChans[0].filter[1].setParams(BiquadType::Peaking, gain, f0norm,
- calc_rcpQ_from_bandwidth(f0norm, props->Equalizer.Mid1Width));
+ BiquadFilter::rcpQFromBandwidth(f0norm, props->Equalizer.Mid1Width));
gain = maxf(props->Equalizer.Mid2Gain, 0.0625f);
f0norm = props->Equalizer.Mid2Center/frequency;
mChans[0].filter[2].setParams(BiquadType::Peaking, gain, f0norm,
- calc_rcpQ_from_bandwidth(f0norm, props->Equalizer.Mid2Width));
+ BiquadFilter::rcpQFromBandwidth(f0norm, props->Equalizer.Mid2Width));
gain = maxf(sqrtf(props->Equalizer.HighGain), 0.0625f);
f0norm = props->Equalizer.HighCutoff/frequency;
mChans[0].filter[3].setParams(BiquadType::HighShelf, gain, f0norm,
- calc_rcpQ_from_slope(gain, 0.75f));
+ BiquadFilter::rcpQFromSlope(gain, 0.75f));
/* Copy the filter coefficients for the other input channels. */
for(ALsizei i{1};i < slot->Wet.NumChannels;++i)
diff --git a/Alc/effects/modulator.cpp b/Alc/effects/modulator.cpp
index 0ddd0510..f926cb87 100644
--- a/Alc/effects/modulator.cpp
+++ b/Alc/effects/modulator.cpp
@@ -128,7 +128,7 @@ void ModulatorState::update(const ALCcontext *context, const ALeffectslot *slot,
f0norm = clampf(f0norm, 1.0f/512.0f, 0.49f);
/* Bandwidth value is constant in octaves. */
mChans[0].Filter.setParams(BiquadType::HighPass, 1.0f, f0norm,
- calc_rcpQ_from_bandwidth(f0norm, 0.75f));
+ BiquadFilter::rcpQFromBandwidth(f0norm, 0.75f));
for(ALsizei i{1};i < slot->Wet.NumChannels;++i)
mChans[i].Filter.copyParamsFrom(mChans[0].Filter);
diff --git a/Alc/effects/reverb.cpp b/Alc/effects/reverb.cpp
index 6b159b0c..3c39199d 100644
--- a/Alc/effects/reverb.cpp
+++ b/Alc/effects/reverb.cpp
@@ -705,9 +705,9 @@ void T60Filter::calcCoeffs(const ALfloat length, const ALfloat lfDecayTime,
MidGain[1] = mfGain;
LFFilter.setParams(BiquadType::LowShelf, lfGain/mfGain, lf0norm,
- calc_rcpQ_from_slope(lfGain/mfGain, 1.0f));
+ LFFilter.rcpQFromSlope(lfGain/mfGain, 1.0f));
HFFilter.setParams(BiquadType::HighShelf, hfGain/mfGain, hf0norm,
- calc_rcpQ_from_slope(hfGain/mfGain, 1.0f));
+ HFFilter.rcpQFromSlope(hfGain/mfGain, 1.0f));
}
/* Update the early reflection line lengths and gain coefficients. */
@@ -916,11 +916,11 @@ void ReverbState::update(const ALCcontext *Context, const ALeffectslot *Slot, co
*/
ALfloat gainhf{maxf(props->Reverb.GainHF, 0.001f)};
mFilter[0].Lp.setParams(BiquadType::HighShelf, gainhf, hf0norm,
- calc_rcpQ_from_slope(gainhf, 1.0f));
+ mFilter[0].Lp.rcpQFromSlope(gainhf, 1.0f));
ALfloat lf0norm{minf(props->Reverb.LFReference / frequency, 0.49f)};
ALfloat gainlf{maxf(props->Reverb.GainLF, 0.001f)};
mFilter[0].Hp.setParams(BiquadType::LowShelf, gainlf, lf0norm,
- calc_rcpQ_from_slope(gainlf, 1.0f));
+ mFilter[0].Hp.rcpQFromSlope(gainlf, 1.0f));
for(ALsizei i{1};i < NUM_LINES;i++)
{
mFilter[i].Lp.copyParamsFrom(mFilter[0].Lp);
diff --git a/Alc/filters/biquad.h b/Alc/filters/biquad.h
index 5d51945e..96bf3407 100644
--- a/Alc/filters/biquad.h
+++ b/Alc/filters/biquad.h
@@ -57,8 +57,8 @@ public:
* BandPass filter types, or the cutoff frequency for the
* LowPass and HighPass filter types.
* \param rcpQ The reciprocal of the Q coefficient for the filter's
- * transition band. Can be generated from calc_rcpQ_from_slope
- * or calc_rcpQ_from_bandwidth as needed.
+ * transition band. Can be generated from rcpQFromSlope or
+ * rcpQFromBandwidth as needed.
*/
void setParams(BiquadType type, Real gain, Real f0norm, Real rcpQ);
@@ -100,29 +100,29 @@ public:
z2_ = in*b2 - out*a2;
return out;
}
+
+ /**
+ * Calculates the rcpQ (i.e. 1/Q) coefficient for shelving filters, using
+ * the reference gain and shelf slope parameter.
+ * \param gain 0 < gain
+ * \param slope 0 < slope <= 1
+ */
+ static Real rcpQFromSlope(Real gain, Real slope)
+ { return std::sqrt((gain + 1.0f/gain)*(1.0f/slope - 1.0f) + 2.0f); }
+
+ /**
+ * Calculates the rcpQ (i.e. 1/Q) coefficient for filters, using the
+ * normalized reference frequency and bandwidth.
+ * \param f0norm 0 < f0norm < 0.5.
+ * \param bandwidth 0 < bandwidth
+ */
+ static Real rcpQFromBandwidth(Real f0norm, Real bandwidth)
+ {
+ const Real w0{al::MathDefs<Real>::Tau() * f0norm};
+ return 2.0f*std::sinh(std::log(Real{2.0f})/2.0f*bandwidth*w0/std::sin(w0));
+ }
};
using BiquadFilter = BiquadFilterR<float>;
-/**
- * Calculates the rcpQ (i.e. 1/Q) coefficient for shelving filters, using the
- * reference gain and shelf slope parameter.
- * \param gain 0 < gain
- * \param slope 0 < slope <= 1
- */
-inline float calc_rcpQ_from_slope(float gain, float slope)
-{ return std::sqrt((gain + 1.0f/gain)*(1.0f/slope - 1.0f) + 2.0f); }
-
-/**
- * Calculates the rcpQ (i.e. 1/Q) coefficient for filters, using the normalized
- * reference frequency and bandwidth.
- * \param f0norm 0 < f0norm < 0.5.
- * \param bandwidth 0 < bandwidth
- */
-inline float calc_rcpQ_from_bandwidth(float f0norm, float bandwidth)
-{
- const float w0{al::MathDefs<float>::Tau() * f0norm};
- return 2.0f*std::sinh(std::log(2.0f)/2.0f*bandwidth*w0/std::sin(w0));
-}
-
#endif /* FILTERS_BIQUAD_H */