54 NodeGraphManager(uint32_t sample_rate = 48000, uint32_t block_size = 512, uint32_t frame_rate = 60);
79 void add_to_root(
const std::shared_ptr<Node>& node,
ProcessingToken token,
unsigned int channel = 0);
90 void remove_from_root(
const std::shared_ptr<Node>& node,
ProcessingToken token,
unsigned int channel = 0);
98 [[nodiscard]]
const std::vector<std::shared_ptr<Node>>&
112 std::function<
void(std::span<RootNode*>)> processor);
123 const std::unordered_map<unsigned int, std::shared_ptr<RootNode>>& get_all_channel_root_nodes(
ProcessingToken token = ProcessingToken::AUDIO_RATE)
const;
133 bool is_node_registered(
const std::shared_ptr<Node>& node);
145 void process_token(
ProcessingToken token,
unsigned int num_samples = 1);
181 std::vector<double> process_channel(
ProcessingToken token,
unsigned int channel,
unsigned int num_samples);
206 std::unordered_map<unsigned int, std::vector<double>> process_token_with_channel_data(
244 void process_all_tokens(
unsigned int num_samples = 1);
253 std::vector<ProcessingToken> get_active_tokens()
const;
260 std::vector<unsigned int> get_all_channels(
ProcessingToken token)
const;
296 [[nodiscard]] std::vector<std::shared_ptr<Network::NodeNetwork>> get_networks(
ProcessingToken token, uint32_t channel = 0)
const;
311 void register_network_global(
const std::shared_ptr<Network::NodeNetwork>&
network);
316 void unregister_network_global(
const std::shared_ptr<Network::NodeNetwork>&
network);
328 std::vector<std::vector<double>> process_audio_networks(
ProcessingToken token, uint32_t num_samples, uint32_t channel = 0);
336 void terminate_active_processing();
349 void route_node_to_channels(
350 const std::shared_ptr<Node>& node,
351 const std::vector<uint32_t>& target_channels,
352 uint32_t fade_cycles,
366 void route_network_to_channels(
367 const std::shared_ptr<Network::NodeNetwork>&
network,
368 const std::vector<uint32_t>& target_channels,
369 uint32_t fade_cycles,
418 std::unordered_map<unsigned int, std::shared_ptr<RootNode>>>
429 std::function<void(std::span<RootNode*>)>>
460 std::vector<std::shared_ptr<Network::NodeNetwork>>>
467 std::unordered_map<ProcessingToken, std::vector<std::shared_ptr<Network::NodeNetwork>>>
477 std::atomic<bool> m_terminate_requested {
false };
479 uint32_t m_registered_sample_rate { 48000 };
481 uint32_t m_registered_frame_rate { 60 };
483 uint32_t m_registered_block_size { 512 };
504 void ensure_token_exists(
ProcessingToken token, uint32_t num_channels = 1);
512 void register_global(
const std::shared_ptr<Node>& node);
519 void set_channel_mask(
const std::shared_ptr<Node>& node, uint32_t channel_id);
528 void unset_channel_mask(
const std::shared_ptr<Node>& node, uint32_t channel_id);
536 void unregister_global(
const std::shared_ptr<Node>& node);
545 void normalize_sample(
double& sample, uint32_t num_nodes);
550 bool is_network_registered(
const std::shared_ptr<Network::NodeNetwork>&
network);
557 [[nodiscard]] std::vector<std::shared_ptr<Network::NodeNetwork>> get_all_networks(
ProcessingToken token)
const;
564 void reset_audio_network_state(
ProcessingToken token, uint32_t channel = 0);
578 void postprocess_networks(
ProcessingToken token, std::optional<uint32_t> channel);