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"
|
||||
|
||||
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:
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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() {}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user