149 const std::vector<double>& q_values);
164 void process_batch(
unsigned int num_samples)
override;
169 [[nodiscard]]
size_t get_node_count()
const override {
return m_resonators.size(); }
174 [[nodiscard]] std::optional<std::vector<double>> get_audio_buffer()
const override;
181 [[nodiscard]] std::optional<double> get_node_output(
size_t index)
const override;
193 void map_parameter(
const std::string& param_name,
194 const std::shared_ptr<Node>& source,
195 MappingMode mode = MappingMode::BROADCAST)
override;
202 void map_parameter(
const std::string& param_name,
203 const std::shared_ptr<NodeNetwork>& source_network)
override;
208 void unmap_parameter(
const std::string& param_name)
override;
220 void set_exciter(
const std::shared_ptr<Node>& exciter);
225 void clear_exciter();
233 void set_resonator_exciter(
size_t index,
const std::shared_ptr<Node>& exciter);
240 void clear_resonator_exciter(
size_t index);
246 void set_network_exciter(
const std::shared_ptr<NodeNetwork>&
network);
251 void clear_network_exciter();
263 void set_frequency(
size_t index,
double frequency);
271 void set_q(
size_t index,
double q);
279 void set_resonator_gain(
size_t index,
double gain);
289 void set_all_frequencies(
double frequency);
295 void set_all_q(
double q);
303 void apply_preset(FormantPreset preset);
312 [[nodiscard]]
const std::vector<ResonatorNode>&
get_resonators()
const {
return m_resonators; }
319 [[nodiscard]] std::optional<std::span<const double>>
320 get_node_audio_buffer(
size_t index)
const override;
332 [[nodiscard]] std::unordered_map<std::string, std::string> get_metadata()
const override;
343 void compute_biquad(ResonatorNode& r);
350 void build_resonators(
const std::vector<double>& frequencies,
351 const std::vector<double>& qs);
360 static void preset_to_vectors(FormantPreset preset,
362 std::vector<double>& out_freqs,
363 std::vector<double>& out_qs);
368 void update_mapped_parameters();
375 void apply_broadcast_parameter(
const std::string& param,
double value);
382 void apply_one_to_one_parameter(
const std::string& param,
383 const std::shared_ptr<NodeNetwork>& source);
397 std::atomic<double> m_norm_factor { 1.0 };