fix: calculate normals without struct

This commit is contained in:
2023-09-08 17:11:36 +04:00
parent 55242db407
commit 1cf3cccb69
5 changed files with 20 additions and 28 deletions

View File

@@ -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:

View File

@@ -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;
}

View File

@@ -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() {}

View File

@@ -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;
}

View File

@@ -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;
}