MayaFlux 0.2.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 161 of file ResonatorNetwork.cpp.

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