151 const std::vector<double>& q_values);
166 void process_batch(
unsigned int num_samples)
override;
171 [[nodiscard]]
size_t get_node_count()
const override {
return m_resonators.size(); }
176 [[nodiscard]] std::optional<std::vector<double>> get_audio_buffer()
const override;
183 [[nodiscard]] std::optional<double> get_node_output(
size_t index)
const override;
195 void map_parameter(
const std::string& param_name,
196 const std::shared_ptr<Node>& source,
204 void map_parameter(
const std::string& param_name,
205 const std::shared_ptr<NodeNetwork>& source_network)
override;
210 void unmap_parameter(
const std::string& param_name)
override;
222 void set_exciter(
const std::shared_ptr<Node>& exciter);
227 void clear_exciter();
235 void set_resonator_exciter(
size_t index,
const std::shared_ptr<Node>& exciter);
242 void clear_resonator_exciter(
size_t index);
248 void set_network_exciter(
const std::shared_ptr<NodeNetwork>&
network);
253 void clear_network_exciter();
273 void set_q(
size_t index,
double q);
281 void set_resonator_gain(
size_t index,
double gain);
287 void set_resonator_gain(std::span<const double> gains);
306 void retune(std::span<const double> frequencies);
318 void set_decay(
size_t index,
double seconds);
324 void set_decay(std::span<const double> seconds);
334 void set_all_frequencies(
double frequency);
340 void set_all_q(
double q);
348 void apply_preset(FormantPreset preset);
357 [[nodiscard]]
const std::vector<ResonatorNode>&
get_resonators()
const {
return m_resonators; }
364 [[nodiscard]] std::optional<std::span<const double>>
365 get_node_audio_buffer(
size_t index)
const override;
377 [[nodiscard]] std::unordered_map<std::string, std::string> get_metadata()
const override;
388 void compute_biquad(ResonatorNode& r);
396 void write_biquad_in_place(ResonatorNode& r);
403 void build_resonators(
const std::vector<double>& frequencies,
404 const std::vector<double>& qs);
413 static void preset_to_vectors(FormantPreset preset,
415 std::vector<double>& out_freqs,
416 std::vector<double>& out_qs);
421 void update_mapped_parameters();
428 void apply_broadcast_parameter(
const std::string& param,
double value);
435 void apply_one_to_one_parameter(
const std::string& param,
436 const std::shared_ptr<NodeNetwork>& source);
450 std::atomic<double> m_norm_factor { 1.0 };