Krotos Modules 3
Loading...
Searching...
No Matches
MoogVcf.h
Go to the documentation of this file.
1namespace krotos
2{
3 //==============================================================================
15 class MoogVcf
16 {
17 public:
18 //--------------------------------------------------------------------------
20
25 void setUpFirst(double sampleRate, int /*samplesPerBlock*/)
26 {
27 m_sr = static_cast<float>(sampleRate);
28 k = 1.0f / m_sr;
29 }
30
31 //--------------------------------------------------------------------------
33
36 float getSr() { return m_sr; }
37
38 //--------------------------------------------------------------------------
40
49 void updateCutoff(float _f0)
50 {
51 // Calculate state variables from former parameter values
52 A0P = 1.0f + (om0 * k) / 2.0f;
53 A0M = 1.0f - (om0 * k) / 2.0f;
54 A1 = (om0 * k) / 2.0f;
55 A3 = 2.0f * r * om0 * k;
56
57 // Calculate state variables from new parameter values
58 om0New = tau * _f0;
59 A0PNew = 1.0f + (om0New * k) / 2.0f;
60 A1New = (om0New * k) / 2.0f;
61
62 // If resonance is not readjusted just update the A3New filter coefficient
63 A3New = 2.0f * r * om0New * k;
64 }
65
66 //--------------------------------------------------------------------------
68
74 void updateResonance(float _r)
75 {
76 // Calculate state variables from former parameter values
77 A3 = 2.0f * r * om0 * k;
78
79 // Calculate state variables from new parameter values
80 rNew = _r;
81
82 A3New = 2.0f * rNew * om0 * k;
83 }
84
85 //--------------------------------------------------------------------------
87
94 float process(float inputSampleNow, float inputSampleBefore)
95 {
96 float xf1[4];
97 // Update the state xf1 = xf;
98 std::memcpy(xf1, xf, sizeof(float) * 4);
99
100 xf[0] = (-A3New * xf[3] + A0M * xf1[0] - A3 * xf1[3] +
101 om0 * k / 2.0f * (inputSampleNow + inputSampleBefore)) /
102 A0PNew;
103 xf[1] = (A1New * xf[0] + A1 * xf1[0] + A0M * xf1[1]) / A0PNew;
104 xf[2] = (A1New * xf[1] + A1 * xf1[1] + A0M * xf1[2]) / A0PNew;
105 xf[3] = (A1New * xf[2] + A1 * xf1[2] + A0M * xf1[3]) / A0PNew;
106
107 // Update parameters
108 om0 = om0New;
109 r = rNew;
110 // Return the output
111 return xf[3];
112 }
113
114 private:
115 static constexpr float tau = 2.0f * 3.1415926535f;
116 const float initialF = 20.0f;
117 // Main Parameters
118 float m_sr;
120 float om0 = tau * initialF;
121 float om0New;
123 float r = 0.0f;
124 float rNew;
125 // Derived Parameters
127 float k;
128
129 // State variables and coefficients
130 float A0P;
131 float A0PNew;
132 float A0M;
133 float A1;
134 float A1New;
135 float A3;
136 float A3New;
137 float xf[4] = {0.0};
138 };
139} // namespace krotos
Apply the Moog voltage controlled filter to an audio signal.
Definition MoogVcf.h:16
float A0PNew
Definition MoogVcf.h:131
void updateResonance(float _r)
updateResonance
Definition MoogVcf.h:74
float rNew
Definition MoogVcf.h:124
float k
Time step.
Definition MoogVcf.h:127
float A3New
Definition MoogVcf.h:136
void updateCutoff(float _f0)
updateCutoff
Definition MoogVcf.h:49
float m_sr
Definition MoogVcf.h:118
float A1New
Definition MoogVcf.h:134
float A0P
Definition MoogVcf.h:130
float r
Feedback coefficient.
Definition MoogVcf.h:123
float om0
Resonant filter frequency.
Definition MoogVcf.h:120
float A0M
Definition MoogVcf.h:132
static constexpr float tau
Definition MoogVcf.h:115
const float initialF
Definition MoogVcf.h:116
float A3
Definition MoogVcf.h:135
float A1
Definition MoogVcf.h:133
float getSr()
getSr()
Definition MoogVcf.h:36
float process(float inputSampleNow, float inputSampleBefore)
process()
Definition MoogVcf.h:94
void setUpFirst(double sampleRate, int)
setUpFirst
Definition MoogVcf.h:25
float xf[4]
Definition MoogVcf.h:137
float om0New
Definition MoogVcf.h:121
Definition AirAbsorptionFilter.cpp:2