fix: calculate normals without struct
This commit is contained in:
11
inc/Filter.h
11
inc/Filter.h
@@ -2,21 +2,16 @@
|
|||||||
#include "Effect.h"
|
#include "Effect.h"
|
||||||
|
|
||||||
class Filter : public Effect {
|
class Filter : public Effect {
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
struct Normals {
|
|
||||||
float V;
|
|
||||||
float K;
|
|
||||||
};
|
|
||||||
|
|
||||||
float m_freq; // cutoff frequency
|
float m_freq; // cutoff frequency
|
||||||
float m_q; // filter quantity (resonance)
|
float m_q; // filter quantity (resonance)
|
||||||
float m_order; // filter order (peakGain)
|
float m_order; // filter order (peakGain)
|
||||||
/* todo: filter adsr */
|
/* 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_a0, m_a1, m_a2, m_b1, m_b2;
|
||||||
float m_z1, m_z2;
|
float m_z1, m_z2;
|
||||||
Normals calculate_normals();
|
|
||||||
|
void calculate_normals();
|
||||||
virtual void calculate_coefficients(){};
|
virtual void calculate_coefficients(){};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|||||||
@@ -13,11 +13,11 @@ BandPassFilter::BandPassFilter(float freq, float res, float q) {}
|
|||||||
BandPassFilter::~BandPassFilter() {}
|
BandPassFilter::~BandPassFilter() {}
|
||||||
|
|
||||||
void BandPassFilter::calculate_coefficients() {
|
void BandPassFilter::calculate_coefficients() {
|
||||||
Filter::Normals base = calculate_normals();
|
calculate_normals();
|
||||||
m_norm = 1 / (1 + base.K / m_q + base.K * base.K);
|
m_norm = 1 / (1 + m_k / m_q + m_k * m_k);
|
||||||
m_a0 = base.K / m_q * m_norm;
|
m_a0 = m_k / m_q * m_norm;
|
||||||
m_a1 = 0;
|
m_a1 = 0;
|
||||||
m_a2 = -m_a0;
|
m_a2 = -m_a0;
|
||||||
m_b1 = 2 * (base.K * base.K - 1) * m_norm;
|
m_b1 = 2 * (m_k * m_k - 1) * m_norm;
|
||||||
m_b2 = (1 - base.K / m_q + base.K * base.K) * m_norm;
|
m_b2 = (1 - m_k / m_q + m_k * m_k) * m_norm;
|
||||||
}
|
}
|
||||||
@@ -5,12 +5,9 @@ Filter::Filter(/* args */) {}
|
|||||||
|
|
||||||
Filter::~Filter() {}
|
Filter::~Filter() {}
|
||||||
|
|
||||||
Filter::Normals Filter::calculate_normals() {
|
void Filter::calculate_normals() {
|
||||||
Filter::Normals res;
|
m_v = powf(10, fabs(m_order) / 20.0);
|
||||||
res.V = powf(10, fabs(m_order) / 20.0);
|
m_k = tanf(M_PI * m_freq);
|
||||||
res.K = tanf(M_PI * m_freq);
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Filter::Trigger() {}
|
void Filter::Trigger() {}
|
||||||
|
|||||||
@@ -13,11 +13,11 @@ HighPassFilter::HighPassFilter(float freq, float res, float q) {}
|
|||||||
HighPassFilter::~HighPassFilter() {}
|
HighPassFilter::~HighPassFilter() {}
|
||||||
|
|
||||||
void HighPassFilter::calculate_coefficients() {
|
void HighPassFilter::calculate_coefficients() {
|
||||||
Filter::Normals base = calculate_normals();
|
calculate_normals();
|
||||||
m_norm = 1 / (1 + base.K / m_q + base.K * base.K);
|
m_norm = 1 / (1 + m_k / m_q + m_k * m_k);
|
||||||
m_a0 = 1 * m_norm;
|
m_a0 = 1 * m_norm;
|
||||||
m_a1 = -2 * m_a0;
|
m_a1 = -2 * m_a0;
|
||||||
m_a2 = m_a0;
|
m_a2 = m_a0;
|
||||||
m_b1 = 2 * (base.K * base.K - 1) * m_norm;
|
m_b1 = 2 * (m_k * m_k - 1) * m_norm;
|
||||||
m_b2 = (1 - base.K / m_q + base.K * base.K) * m_norm;
|
m_b2 = (1 - m_k / m_q + m_k * m_k) * m_norm;
|
||||||
}
|
}
|
||||||
@@ -23,11 +23,11 @@ LowPassFilter::LowPassFilter(Filter* filter) {
|
|||||||
LowPassFilter::~LowPassFilter() {}
|
LowPassFilter::~LowPassFilter() {}
|
||||||
|
|
||||||
void LowPassFilter::calculate_coefficients() {
|
void LowPassFilter::calculate_coefficients() {
|
||||||
Filter::Normals base = calculate_normals();
|
calculate_normals();
|
||||||
m_norm = 1 / (1 + base.K / m_q + base.K * base.K);
|
m_norm = 1 / (1 + m_k / m_q + m_k * m_k);
|
||||||
m_a0 = base.K * base.K * m_norm;
|
m_a0 = m_k * m_k * m_norm;
|
||||||
m_a1 = 2 * m_a0;
|
m_a1 = 2 * m_a0;
|
||||||
m_a2 = m_a0;
|
m_a2 = m_a0;
|
||||||
m_b1 = 2 * (base.K * base.K - 1) * m_norm;
|
m_b1 = 2 * (m_k * m_k - 1) * m_norm;
|
||||||
m_b2 = (1 - base.K / m_q + base.K * base.K) * m_norm;
|
m_b2 = (1 - m_k / m_q + m_k * m_k) * m_norm;
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user