12 using namespace swift::config;
14 namespace swift::sound::dsp
16 float BiQuadFilter::transform(
float inSample)
19 double result = m_a0 * inSample + m_a1 * m_x1 + m_a2 * m_x2 - m_a3 * m_y1 - m_a4 * m_y2;
27 m_y1 =
static_cast<float>(result);
32 void BiQuadFilter::setCoefficients(
double aa0,
double aa1,
double aa2,
double b0,
double b1,
double b2)
34 if (CBuildConfig::isLocalDeveloperDebugBuild()) {
SWIFT_VERIFY_X(qAbs(aa0) > 1E-06, Q_FUNC_INFO,
"Div by zero?"); }
44 void BiQuadFilter::setLowPassFilter(
float sampleRate,
float cutoffFrequency,
float q)
47 auto w0 = 2 * M_PI * cutoffFrequency / sampleRate;
48 auto cosw0 = qCos(w0);
49 auto alpha = qSin(w0) / (2 * q);
51 auto b0 = (1 - cosw0) / 2;
53 auto b2 = (1 - cosw0) / 2;
55 auto aa1 = -2 * cosw0;
57 setCoefficients(aa0, aa1, aa2, b0, b1, b2);
60 void BiQuadFilter::setPeakingEq(
float sampleRate,
float centreFrequency,
float q,
float dbGain)
63 auto w0 = 2 * M_PI * centreFrequency / sampleRate;
64 auto cosw0 = qCos(w0);
65 auto sinw0 = qSin(w0);
66 auto alpha = sinw0 / (2 * q);
67 auto a = qPow(10, dbGain / 40);
69 auto b0 = 1 + alpha * a;
71 auto b2 = 1 - alpha * a;
72 auto aa0 = 1 + alpha / a;
73 auto aa1 = -2 * cosw0;
74 auto aa2 = 1 - alpha / a;
75 setCoefficients(aa0, aa1, aa2, b0, b1, b2);
78 void BiQuadFilter::setHighPassFilter(
float sampleRate,
float cutoffFrequency,
float q)
81 auto w0 = 2 * M_PI * cutoffFrequency / sampleRate;
82 auto cosw0 = qCos(w0);
83 auto alpha = qSin(w0) / (2 * q);
85 auto b0 = (1 + cosw0) / 2;
86 auto b1 = -(1 + cosw0);
87 auto b2 = (1 + cosw0) / 2;
89 auto aa1 = -2 * cosw0;
91 setCoefficients(aa0, aa1, aa2, b0, b1, b2);
94 BiQuadFilter BiQuadFilter::lowPassFilter(
float sampleRate,
float cutoffFrequency,
float q)
101 BiQuadFilter BiQuadFilter::highPassFilter(
float sampleRate,
float cutoffFrequency,
float q)
108 BiQuadFilter BiQuadFilter::peakingEQ(
float sampleRate,
float centreFrequency,
float q,
float dbGain)
111 filter.
setPeakingEq(sampleRate, centreFrequency, q, dbGain);
void setPeakingEq(float sampleRate, float centreFrequency, float q, float dbGain)
Set filter parameters.
void setLowPassFilter(float sampleRate, float cutoffFrequency, float q)
Set filter parameters.
void setHighPassFilter(float sampleRate, float cutoffFrequency, float q)
Set filter parameters.
Free functions in swift::misc.
#define SWIFT_VERIFY_X(COND, WHERE, WHAT)
A weaker kind of assert.