54 NodeGraphManager(uint32_t sample_rate = 48000, uint32_t block_size = 512, uint32_t frame_rate = 60);
104 auto node = get_node(node_id);
106 add_to_root(node, token,
channel);
121 std::function<
void(std::span<RootNode*>)> processor);
132 const std::unordered_map<unsigned int, std::shared_ptr<RootNode>>& get_all_channel_root_nodes(
ProcessingToken token = ProcessingToken::AUDIO_RATE)
const;
152 template <
typename NodeType,
typename... Args>
153 inline std::shared_ptr<NodeType>
create_node(
const std::string&
id, Args&&... args)
155 auto node = std::make_shared<NodeType>(std::forward<Args>(args)...);
156 m_Node_registry[
id] = node;
169 std::shared_ptr<Node> get_node(
const std::string&
id);
186 void connect(
const std::string& source_id,
const std::string& target_id);
196 bool is_node_registered(
const std::shared_ptr<Node>& node);
208 void process_token(
ProcessingToken token,
unsigned int num_samples = 1);
244 std::vector<double> process_channel(
ProcessingToken token,
unsigned int channel,
unsigned int num_samples);
269 std::unordered_map<unsigned int, std::vector<double>> process_token_with_channel_data(
307 void process_all_tokens(
unsigned int num_samples = 1);
316 std::vector<ProcessingToken> get_active_tokens()
const;
323 std::vector<unsigned int> get_all_channels(
ProcessingToken token)
const;
339 void print_summary()
const;
353 void add_network(
const std::shared_ptr<Network::NodeNetwork>& network,
ProcessingToken token);
361 void remove_network(
const std::shared_ptr<Network::NodeNetwork>& network,
ProcessingToken token);
368 [[nodiscard]] std::vector<std::shared_ptr<Network::NodeNetwork>> get_networks(
ProcessingToken token, uint32_t
channel = 0)
const;
375 [[nodiscard]] std::vector<std::shared_ptr<Network::NodeNetwork>> get_all_networks(
ProcessingToken token)
const;
390 void register_network_global(
const std::shared_ptr<Network::NodeNetwork>& network);
395 void unregister_network_global(
const std::shared_ptr<Network::NodeNetwork>& network);
407 std::vector<std::vector<double>> process_audio_networks(
ProcessingToken token, uint32_t num_samples, uint32_t
channel = 0);
415 void terminate_active_processing();
428 void route_node_to_channels(
429 const std::shared_ptr<Node>& node,
430 const std::vector<uint32_t>& target_channels,
431 uint32_t fade_cycles,
445 void route_network_to_channels(
446 const std::shared_ptr<Network::NodeNetwork>& network,
447 const std::vector<uint32_t>& target_channels,
448 uint32_t fade_cycles,
509 std::unordered_map<unsigned int, std::shared_ptr<RootNode>>>
520 std::function<void(std::span<RootNode*>)>>
553 std::vector<std::shared_ptr<Network::NodeNetwork>>>
560 std::unordered_map<ProcessingToken, std::vector<std::shared_ptr<Network::NodeNetwork>>>
570 std::atomic<bool> m_terminate_requested {
false };
572 uint32_t m_registered_sample_rate { 48000 };
574 uint32_t m_registered_frame_rate { 60 };
576 uint32_t m_registered_block_size { 512 };
597 void ensure_token_exists(
ProcessingToken token, uint32_t num_channels = 1);
605 void register_global(
const std::shared_ptr<Node>& node);
612 void set_channel_mask(
const std::shared_ptr<Node>& node, uint32_t channel_id);
621 void unset_channel_mask(
const std::shared_ptr<Node>& node, uint32_t channel_id);
629 void unregister_global(
const std::shared_ptr<Node>& node);
638 void normalize_sample(
double& sample, uint32_t num_nodes);
643 bool is_network_registered(
const std::shared_ptr<Network::NodeNetwork>& network);