Audaspace:
[blender.git] / intern / audaspace / FX / AUD_HighpassCalculator.cpp
1 #include "AUD_HighpassCalculator.h"
2
3 #include <cmath>
4
5 #ifndef M_PI
6 #define M_PI 3.14159265358979323846
7 #endif
8
9 AUD_HighpassCalculator::AUD_HighpassCalculator(float frequency, float Q) :
10         m_frequency(frequency),
11         m_Q(Q)
12 {
13 }
14
15 void AUD_HighpassCalculator::recalculateCoefficients(AUD_SampleRate rate, std::vector<float> &b, std::vector<float> &a)
16 {
17         float w0 = 2.0 * M_PI * (AUD_SampleRate)m_frequency / rate;
18         float alpha = (float)(sin(w0) / (2.0 * (double)m_Q));
19         float norm = 1 + alpha;
20         float c = cos(w0);
21         a.push_back(1);
22         a.push_back(-2 * c / norm);
23         a.push_back((1 - alpha) / norm);
24         b.push_back((1 + c) / (2 * norm));
25         b.push_back((-1 - c) / norm);
26         b.push_back(b[0]);
27 }