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

◆ build_resonators()

void MayaFlux::Nodes::Network::ResonatorNetwork::build_resonators ( const std::vector< double > &  frequencies,
const std::vector< double > &  qs 
)
private

Initialise all resonators from a frequency/Q pair list.

Parameters
frequenciesCentre frequencies in Hz
qsQ factors

Definition at line 142 of file ResonatorNetwork.cpp.

144{
145 m_resonators.clear();
146 m_resonators.reserve(frequencies.size());
147
148 for (size_t i = 0; i < frequencies.size(); ++i) {
149 ResonatorNode r;
150 r.frequency = std::clamp(frequencies[i], 1.0, m_sample_rate * 0.5 - 1.0);
151 r.q = std::clamp(qs[i], 0.1, 1000.0);
152 r.gain = 1.0;
153 r.last_output = 0.0;
154 r.index = i;
155 r.filter = std::make_shared<Filters::IIR>(
156 std::vector<double> { 1.0, 0.0, 0.0 },
157 std::vector<double> { 0.0, 0.0, 0.0 });
159 m_resonators.push_back(std::move(r));
160 }
161
162 m_norm_factor.store(1.0 / std::sqrt(static_cast<double>(m_resonators.size())), std::memory_order_release);
163}
void compute_biquad(ResonatorNode &r)
Compute RBJ biquad bandpass coefficients and push them into a resonator's IIR.
std::atomic< double > m_norm_factor
Normalisation factor for summed output, rms scaled by number of active resonators.

References compute_biquad(), MayaFlux::Nodes::Network::ResonatorNetwork::ResonatorNode::filter, MayaFlux::Nodes::Network::ResonatorNetwork::ResonatorNode::frequency, MayaFlux::Nodes::Network::ResonatorNetwork::ResonatorNode::gain, MayaFlux::Nodes::Network::ResonatorNetwork::ResonatorNode::index, MayaFlux::Nodes::Network::ResonatorNetwork::ResonatorNode::last_output, m_norm_factor, m_resonators, MayaFlux::Nodes::Network::NodeNetwork::m_sample_rate, and MayaFlux::Nodes::Network::ResonatorNetwork::ResonatorNode::q.

Referenced by ResonatorNetwork(), and ResonatorNetwork().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: