17 typedef enum BiquadType {
33 typedef struct BiquadFilter {
40 #define BiquadFilter_process BiquadFilter_processC 48 inline ALfloat calc_rcpQ_from_slope(ALfloat gain, ALfloat slope)
50 return sqrtf((gain + 1.0f/gain)*(1.0f/slope - 1.0f) + 2.0f);
58 inline ALfloat calc_rcpQ_from_bandwidth(ALfloat f0norm, ALfloat bandwidth)
60 ALfloat w0 = F_TAU * f0norm;
61 return 2.0f*sinhf(logf(2.0f)/2.0f*bandwidth*w0/sinf(w0));
64 inline void BiquadFilter_clear(BiquadFilter *filter)
85 void BiquadFilter_setParams(BiquadFilter *filter, BiquadType type, ALfloat gain, ALfloat f0norm, ALfloat rcpQ);
87 inline void BiquadFilter_copyParams(BiquadFilter *restrict dst,
const BiquadFilter *restrict src)
96 void BiquadFilter_processC(BiquadFilter *filter, ALfloat *restrict dst,
const ALfloat *restrict src, ALsizei numsamples);
98 inline void BiquadFilter_passthru(BiquadFilter *filter, ALsizei numsamples)
100 if(LIKELY(numsamples >= 2))
105 else if(numsamples == 1)
107 filter->z1 = filter->z2;