45 "Node graph manager not initialized - cannot register audio node");
49 std::out_of_range err(
"Channel index out of range for audio node registration");
50 std::cerr << err.what() <<
'\n';
55void register_audio_node(
const std::shared_ptr<Nodes::Node>& node,
const std::vector<uint32_t>& channels)
57 for (
const auto& channel : channels) {
67 "Node graph manager not initialized - cannot unregister audio node");
73 "Channel index out of range for audio node registration");
80 for (
const auto& channel : channels) {
90 "Node graph manager not initialized - cannot register node");
94 if (channel >= manager->get_channel_count(token)) {
96 "Channel index out of range for audio node registration");
98 manager->remove_from_root(node, token, channel);
102 const std::shared_ptr<Nodes::Node>& node,
103 const std::vector<uint32_t>& channels,
104 uint32_t num_samples,
111 const std::shared_ptr<Nodes::Node>& node,
112 const std::vector<uint32_t>& channels,
113 double seconds_to_fade,
155 return std::make_shared<Buffers::BufferProcessingChain>();
169void connect_node_to_buffer(
const std::shared_ptr<Nodes::Node>& node,
const std::shared_ptr<Buffers::AudioBuffer>& buffer,
float mix,
bool clear_before)
189 const std::shared_ptr<Nodes::Network::NodeNetwork>& network,
190 const std::vector<uint32_t>& channels,
191 uint32_t num_samples,
198 const std::shared_ptr<Nodes::Network::NodeNetwork>& network,
199 const std::vector<uint32_t>& channels,
200 double seconds_to_fade,
247 std::shared_ptr<Buffers::AudioBuffer> buffer = std::make_shared<Buffers::AudioBuffer>(channel);
258 const std::vector<uint32_t>& channels)
269 uint32_t channel,
double mix)
274 "Buffer manager not initialized - cannot perform supply_buffer_to_channel");
283 const std::vector<uint32_t>& channels,
286 for (
const auto& channel : channels) {
292 const uint32_t channel)
302 const std::vector<uint32_t>& channels)
304 for (
const auto& channel : channels) {
310 const std::shared_ptr<Buffers::AudioBuffer>& buffer,
311 uint32_t target_channel,
312 double seconds_to_fade,
320 const std::shared_ptr<Buffers::AudioBuffer>& buffer,
321 uint32_t target_channel,
325 get_buffer_manager()->route_buffer_to_channel(buffer, target_channel, num_blocks, token);
328std::shared_ptr<Nodes::Node>
operator>>(
const std::shared_ptr<Nodes::Node>& lhs,
const std::shared_ptr<Nodes::Node>& rhs)
332 auto lhs_chain = std::dynamic_pointer_cast<Nodes::ChainNode>(lhs);
333 auto rhs_chain = std::dynamic_pointer_cast<Nodes::ChainNode>(rhs);
337 lhs_chain->append_chain(rhs_chain);
339 lhs_chain->append(rhs);
341 lhs_chain->initialize();
345 std::shared_ptr<Nodes::ChainNode> chain;
347 std::vector<std::shared_ptr<Nodes::Node>> nodes;
348 nodes.reserve(1 + rhs_chain->size());
349 nodes.push_back(lhs);
350 for (
auto& node : rhs_chain->nodes()) {
351 nodes.push_back(node);
353 chain = std::make_shared<Nodes::ChainNode>(std::move(nodes), *manager);
355 chain = std::make_shared<Nodes::ChainNode>(lhs, rhs, *manager);
362std::shared_ptr<Nodes::Node>
operator+(
const std::shared_ptr<Nodes::Node>& lhs,
const std::shared_ptr<Nodes::Node>& rhs)
365 auto result = std::make_shared<Nodes::BinaryOpNode>(
366 lhs, rhs, [](
double a,
double b) {
return a +
b; }, *manager);
367 result->initialize();
371std::shared_ptr<Nodes::Node>
operator*(
const std::shared_ptr<Nodes::Node>& lhs,
const std::shared_ptr<Nodes::Node>& rhs)
374 auto result = std::make_shared<Nodes::BinaryOpNode>(
375 lhs, rhs, [](
double a,
double b) {
return a *
b; }, *manager);
376 result->initialize();
#define MF_ERROR(comp, ctx,...)
Core engine lifecycle and configuration API.
Top-level aggregation buffer for computational data streams.
std::shared_ptr< Nodes::NodeGraphManager > get_node_graph_manager()
Gets the node graph manager.
std::shared_ptr< Buffers::BufferManager > get_buffer_manager()
Gets the buffer manager.
Container for top-level nodes in a processing channel with multi-modal support.
std::function< void(const std::shared_ptr< AudioBuffer > &)> AudioProcessingFunction
Audio processing function - receives correctly-typed AudioBuffer.
ProcessingToken
Bitfield enum defining processing characteristics and backend requirements for buffer operations.
@ AUDIO_BACKEND
Standard audio processing backend configuration.
@ GRAPHICS_BACKEND
Standard graphics processing backend configuration.
std::function< void(const std::shared_ptr< VKBuffer > &)> GraphicsProcessingFunction
Graphics processing function - receives correctly-typed VKBuffer.
@ NodeProcessing
Node graph processing (Nodes::NodeGraphManager)
@ API
MayaFlux/API Wrapper and convenience functions.
ProcessingToken
Enumerates the different processing domains for nodes.
@ AUDIO_RATE
Nodes that process at the audio sample rate.
std::shared_ptr< Buffers::BufferProcessor > attach_quick_process_audio(Buffers::AudioProcessingFunction processor, const std::shared_ptr< Buffers::AudioBuffer > &buffer)
std::shared_ptr< Buffers::BufferProcessor > attach_quick_process_graphics(Buffers::GraphicsProcessingFunction processor, const std::shared_ptr< Buffers::VKBuffer > &buffer)
void connect_node_to_buffer(const std::shared_ptr< Nodes::Node > &node, const std::shared_ptr< Buffers::AudioBuffer > &buffer, float mix, bool clear_before)
Connects a node to a specific buffer.
std::shared_ptr< Nodes::Node > operator*(const std::shared_ptr< Nodes::Node > &lhs, const std::shared_ptr< Nodes::Node > &rhs)
Combines two nodes in parallel (multiplication)
std::shared_ptr< Buffers::AudioBuffer > create_input_listener_buffer(uint32_t channel, bool add_to_output)
Creates a new AudioBuffer for input listening.
void register_node(const std::shared_ptr< Nodes::Node > &node, const Nodes::ProcessingToken &token, uint32_t channel)
std::shared_ptr< Buffers::BufferProcessingChain > create_processing_chain()
Creates a new processing chain for the default engine.
void unregister_node(const std::shared_ptr< Nodes::Node > &node, const Nodes::ProcessingToken &token, uint32_t channel)
Removes a node from the root node of specified channels.
void unregister_graphics_buffer(const std::shared_ptr< Buffers::VKBuffer > &buffer)
Unregisters a VKBuffer from the default engine's buffer manager.
void add_processor(const std::shared_ptr< Buffers::BufferProcessor > &processor, const std::shared_ptr< Buffers::Buffer > &buffer, Buffers::ProcessingToken token)
Adds a processor to a specific buffer.
void route_node(const std::shared_ptr< Nodes::Node > &node, const std::vector< uint32_t > &channels, uint32_t num_samples, const Nodes::ProcessingToken &token)
@breif Moves the node from its current channel(s) to the specified channel(s) with an optional fade t...
std::shared_ptr< Nodes::NodeGraphManager > get_node_graph_manager()
Gets the node graph manager from the default engine.
std::shared_ptr< Buffers::BufferProcessor > attach_quick_process(Buffers::AudioProcessingFunction processor, unsigned int channel_id)
Attaches a processing function to a specific channel.
uint64_t seconds_to_samples(double seconds)
Converts a time duration in seconds to the equivalent number of audio samples.
std::shared_ptr< Nodes::Node > operator>>(const std::shared_ptr< Nodes::Node > &lhs, const std::shared_ptr< Nodes::Node > &rhs)
Connects two nodes in series (pipeline operator)
Buffers::RootAudioBuffer & get_root_audio_buffer(uint32_t channel)
Gets the audio buffer for a specific channel.
void register_node_network(const std::shared_ptr< Nodes::Network::NodeNetwork > &network, const Nodes::ProcessingToken &token)
Registers a node network with the default engine's node graph manager.
std::shared_ptr< Nodes::Node > operator+(const std::shared_ptr< Nodes::Node > &lhs, const std::shared_ptr< Nodes::Node > &rhs)
Combines two nodes in parallel (addition)
void remove_supplied_buffer_from_channels(const std::shared_ptr< Buffers::AudioBuffer > &buffer, const std::vector< uint32_t > &channels)
Removes a supplied buffer from multiple channels.
std::vector< std::shared_ptr< Buffers::AudioBuffer > > clone_buffer_to_channels(const std::shared_ptr< Buffers::AudioBuffer > &buffer, const std::vector< uint32_t > &channels)
Clones a buffer to multiple channels.
void unregister_audio_buffer(const std::shared_ptr< Buffers::AudioBuffer > &buffer, uint32_t channel)
Unregisters an AudioBuffer from the default engine's buffer manager.
void supply_buffer_to_channels(const std::shared_ptr< Buffers::AudioBuffer > &buffer, const std::vector< uint32_t > &channels, double mix)
Supplies a buffer to multiple channels with mixing.
void supply_buffer_to_channel(const std::shared_ptr< Buffers::AudioBuffer > &buffer, uint32_t channel, double mix)
Supplies a buffer to a single channel with mixing.
void route_buffer(const std::shared_ptr< Buffers::AudioBuffer > &buffer, uint32_t target_channel, double seconds_to_fade, const Buffers::ProcessingToken &token)
Routes a buffer from its current channel to a target channel with fade.
void register_audio_buffer(const std::shared_ptr< Buffers::AudioBuffer > &buffer, uint32_t channel)
Registers an AudioBuffer with the default engine's buffer manager.
uint64_t seconds_to_blocks(double seconds)
Converts a time duration in seconds to the equivalent number of processing blocks.
void detach_from_audio_input(const std::shared_ptr< Buffers::AudioBuffer > &buffer, uint32_t channel)
Stops reading audio data from the default input source.
void route_network(const std::shared_ptr< Nodes::Network::NodeNetwork > &network, const std::vector< uint32_t > &channels, uint32_t num_samples, const Nodes::ProcessingToken &token)
@breif Moves the node from its current channel(s) to the specified channel(s) with an optional fade t...
void register_audio_node(const std::shared_ptr< Nodes::Node > &node, uint32_t channel)
Adds a node to the root node of a specific channel.
void unregister_node_network(const std::shared_ptr< Nodes::Network::NodeNetwork > &network, const Nodes::ProcessingToken &token)
Unregisters a node network from the default engine's node graph manager.
void unregister_audio_node(const std::shared_ptr< Nodes::Node > &node, uint32_t channel)
Removes a node from the root node of a specific channel.
std::shared_ptr< Buffers::BufferManager > get_buffer_manager()
Gets the buffer manager from the default engine.
void register_graphics_buffer(const std::shared_ptr< Buffers::VKBuffer > &buffer, Buffers::ProcessingToken token)
Registers a VKBuffer with the default engine's buffer manager.
Core::Engine & get_context()
Gets the default engine instance.
Nodes::RootNode & get_audio_channel_root(uint32_t channel)
Gets the root node for a specific channel.
std::vector< double > mix(const std::vector< std::vector< double > > &streams)
Mix multiple data streams with equal weighting.
void read_from_audio_input(const std::shared_ptr< Buffers::AudioBuffer > &buffer, uint32_t channel)
Reads audio data from the default input source into a buffer.
void connect_node_to_channel(const std::shared_ptr< Nodes::Node > &node, uint32_t channel_index, float mix, bool clear_before)
Connects a node to a specific output channel.
void remove_supplied_buffer_from_channel(const std::shared_ptr< Buffers::AudioBuffer > &buffer, const uint32_t channel)
Removes a supplied buffer from multiple channels.
Main namespace for the Maya Flux audio engine.