diff --git a/inc/Filter.h b/inc/Filter.h index 7961881..7127945 100644 --- a/inc/Filter.h +++ b/inc/Filter.h @@ -2,21 +2,16 @@ #include "Effect.h" class Filter : public Effect { - protected: - struct Normals { - float V; - float K; - }; - float m_freq; // cutoff frequency float m_q; // filter quantity (resonance) float m_order; // filter order (peakGain) /* todo: filter adsr */ - float m_norm; + float m_norm, m_v, m_k; float m_a0, m_a1, m_a2, m_b1, m_b2; float m_z1, m_z2; - Normals calculate_normals(); + + void calculate_normals(); virtual void calculate_coefficients(){}; public: diff --git a/src/BandPassFilter.cpp b/src/BandPassFilter.cpp index c6d51a8..7b2a39c 100644 --- a/src/BandPassFilter.cpp +++ b/src/BandPassFilter.cpp @@ -13,11 +13,11 @@ BandPassFilter::BandPassFilter(float freq, float res, float q) {} BandPassFilter::~BandPassFilter() {} void BandPassFilter::calculate_coefficients() { - Filter::Normals base = calculate_normals(); - m_norm = 1 / (1 + base.K / m_q + base.K * base.K); - m_a0 = base.K / m_q * m_norm; + calculate_normals(); + m_norm = 1 / (1 + m_k / m_q + m_k * m_k); + m_a0 = m_k / m_q * m_norm; m_a1 = 0; m_a2 = -m_a0; - m_b1 = 2 * (base.K * base.K - 1) * m_norm; - m_b2 = (1 - base.K / m_q + base.K * base.K) * m_norm; + m_b1 = 2 * (m_k * m_k - 1) * m_norm; + m_b2 = (1 - m_k / m_q + m_k * m_k) * m_norm; } \ No newline at end of file diff --git a/src/Filter.cpp b/src/Filter.cpp index 181f72e..77962e7 100644 --- a/src/Filter.cpp +++ b/src/Filter.cpp @@ -5,12 +5,9 @@ Filter::Filter(/* args */) {} Filter::~Filter() {} -Filter::Normals Filter::calculate_normals() { - Filter::Normals res; - res.V = powf(10, fabs(m_order) / 20.0); - res.K = tanf(M_PI * m_freq); - - return res; +void Filter::calculate_normals() { + m_v = powf(10, fabs(m_order) / 20.0); + m_k = tanf(M_PI * m_freq); } void Filter::Trigger() {} diff --git a/src/HighPassFilter.cpp b/src/HighPassFilter.cpp index b44573e..b210f8c 100644 --- a/src/HighPassFilter.cpp +++ b/src/HighPassFilter.cpp @@ -13,11 +13,11 @@ HighPassFilter::HighPassFilter(float freq, float res, float q) {} HighPassFilter::~HighPassFilter() {} void HighPassFilter::calculate_coefficients() { - Filter::Normals base = calculate_normals(); - m_norm = 1 / (1 + base.K / m_q + base.K * base.K); + calculate_normals(); + m_norm = 1 / (1 + m_k / m_q + m_k * m_k); m_a0 = 1 * m_norm; m_a1 = -2 * m_a0; m_a2 = m_a0; - m_b1 = 2 * (base.K * base.K - 1) * m_norm; - m_b2 = (1 - base.K / m_q + base.K * base.K) * m_norm; + m_b1 = 2 * (m_k * m_k - 1) * m_norm; + m_b2 = (1 - m_k / m_q + m_k * m_k) * m_norm; } \ No newline at end of file diff --git a/src/LowPassFilter.cpp b/src/LowPassFilter.cpp index 9d43e56..2b42168 100644 --- a/src/LowPassFilter.cpp +++ b/src/LowPassFilter.cpp @@ -23,11 +23,11 @@ LowPassFilter::LowPassFilter(Filter* filter) { LowPassFilter::~LowPassFilter() {} void LowPassFilter::calculate_coefficients() { - Filter::Normals base = calculate_normals(); - m_norm = 1 / (1 + base.K / m_q + base.K * base.K); - m_a0 = base.K * base.K * m_norm; + calculate_normals(); + m_norm = 1 / (1 + m_k / m_q + m_k * m_k); + m_a0 = m_k * m_k * m_norm; m_a1 = 2 * m_a0; m_a2 = m_a0; - m_b1 = 2 * (base.K * base.K - 1) * m_norm; - m_b2 = (1 - base.K / m_q + base.K * base.K) * m_norm; + m_b1 = 2 * (m_k * m_k - 1) * m_norm; + m_b2 = (1 - m_k / m_q + m_k * m_k) * m_norm; } \ No newline at end of file