MayaFlux 0.4.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ compute_biquad()

void MayaFlux::Nodes::Network::ResonatorNetwork::compute_biquad ( ResonatorNode r)
private

Compute RBJ biquad bandpass coefficients and push them into a resonator's IIR.

Parameters
rResonator to update (reads r.frequency, r.q, m_sample_rate)

Definition at line 163 of file ResonatorNetwork.cpp.

164{
165 /*
166 * RBJ Audio EQ Cookbook — BPF (constant 0 dB peak gain):
167 *
168 * w0 = 2π f0 / Fs
169 * alpha = sin(w0) / (2 Q)
170 * b0 = alpha
171 * b1 = 0
172 * b2 = -alpha
173 * a0 = 1 + alpha
174 * a1 = -2 cos(w0)
175 * a2 = 1 - alpha
176 *
177 * Normalised (divide through by a0):
178 * b_coefs = { b0/a0, 0, b2/a0 }
179 * a_coefs = { 1, a1/a0, a2/a0 }
180 */
181 const double w0 = 2.0 * std::numbers::pi * r.frequency / m_sample_rate;
182 const double sinw0 = std::sin(w0);
183 const double cosw0 = std::cos(w0);
184 const double alpha = sinw0 / (2.0 * r.q);
185 const double a0 = 1.0 + alpha;
186
187 const std::vector<double> a = {
188 1.0,
189 (-2.0 * cosw0) / a0,
190 (1.0 - alpha) / a0,
191 };
192 const std::vector<double> b = {
193 alpha / a0,
194 0.0,
195 -alpha / a0,
196 };
197
198 r.filter->setACoefficients(a);
199 r.filter->setBCoefficients(b);
200 r.filter->reset();
201}
size_t a
size_t b

References a, b, MayaFlux::Nodes::Network::ResonatorNetwork::ResonatorNode::filter, MayaFlux::Nodes::Network::ResonatorNetwork::ResonatorNode::frequency, MayaFlux::Nodes::Network::NodeNetwork::m_sample_rate, and MayaFlux::Nodes::Network::ResonatorNetwork::ResonatorNode::q.

Referenced by apply_preset(), build_resonators(), set_frequency(), and set_q().

+ Here is the caller graph for this function: