144 const std::vector<double>& q_values);
158 void process_batch(
unsigned int num_samples)
override;
163 [[nodiscard]]
size_t get_node_count()
const override {
return m_resonators.size(); }
168 [[nodiscard]] std::optional<std::vector<double>> get_audio_buffer()
const override;
175 [[nodiscard]] std::optional<double> get_node_output(
size_t index)
const override;
187 void map_parameter(
const std::string& param_name,
188 const std::shared_ptr<Node>& source,
189 MappingMode mode = MappingMode::BROADCAST)
override;
196 void map_parameter(
const std::string& param_name,
197 const std::shared_ptr<NodeNetwork>& source_network)
override;
202 void unmap_parameter(
const std::string& param_name)
override;
214 void set_exciter(
const std::shared_ptr<Node>& exciter);
219 void clear_exciter();
227 void set_resonator_exciter(
size_t index,
const std::shared_ptr<Node>& exciter);
234 void clear_resonator_exciter(
size_t index);
240 void set_network_exciter(
const std::shared_ptr<NodeNetwork>& network);
245 void clear_network_exciter();
257 void set_frequency(
size_t index,
double frequency);
265 void set_q(
size_t index,
double q);
273 void set_resonator_gain(
size_t index,
double gain);
283 void set_all_frequencies(
double frequency);
289 void set_all_q(
double q);
297 void apply_preset(FormantPreset preset);
306 [[nodiscard]]
const std::vector<ResonatorNode>&
get_resonators()
const {
return m_resonators; }
313 [[nodiscard]] std::optional<std::span<const double>>
314 get_node_audio_buffer(
size_t index)
const override;
326 [[nodiscard]] std::unordered_map<std::string, std::string> get_metadata()
const override;
337 void compute_biquad(ResonatorNode& r);
344 void build_resonators(
const std::vector<double>& frequencies,
345 const std::vector<double>& qs);
354 static void preset_to_vectors(FormantPreset preset,
356 std::vector<double>& out_freqs,
357 std::vector<double>& out_qs);
362 void update_mapped_parameters();
369 void apply_broadcast_parameter(
const std::string& param,
double value);
376 void apply_one_to_one_parameter(
const std::string& param,
377 const std::shared_ptr<NodeNetwork>& source);