10 : m_node(
std::move(node))
12 , m_clear_before_process(clear_before_process)
19 m_node->add_buffer_reference();
26 m_node->remove_buffer_reference();
38 auto& buffer_data = std::dynamic_pointer_cast<AudioBuffer>(buffer)->get_data();
41 if (
auto node_buffer = std::dynamic_pointer_cast<NodeBuffer>(buffer)) {
42 should_clear = node_buffer->get_clear_before_process();
51 }
catch (
const std::exception& e) {
61NodeBuffer::NodeBuffer(uint32_t channel_id, uint32_t num_samples, std::shared_ptr<Nodes::Node> source,
bool clear_before_process)
63 , m_source_node(
std::move(source))
64 , m_clear_before_process(clear_before_process)
#define MF_RT_ERROR(comp, ctx,...)
virtual void clear() override
Resets all audio samples in the buffer to silence.
std::shared_ptr< BufferProcessor > m_default_processor
Default audio transformation processor for this buffer.
Concrete audio implementation of the Buffer interface for double-precision audio data.
NodeBuffer(uint32_t channel_id, uint32_t num_samples, std::shared_ptr< Nodes::Node > source, bool clear_before_process=true)
Creates a new buffer connected to a computational node.
std::shared_ptr< BufferProcessor > create_default_processor() override
Creates the default processor for this buffer type.
void setup_processors(ProcessingToken token) override
Sets up audio processors for the specified processing token.
std::shared_ptr< Nodes::Node > m_source_node
Source node that generates sequential data values.
bool m_clear_before_process
Whether to reset the buffer before adding node output.
void process_default() override
Processes this buffer using its default processor.
NodeSourceProcessor(std::shared_ptr< Nodes::Node > node, float mix=0.5F, bool clear_before_process=true)
Creates a new processor that connects a computational node to data buffers.
void on_attach(const std::shared_ptr< Buffer > &buffer) override
Called when this processor is attached to a buffer.
bool m_clear_before_process
Whether to reset the buffer before adding node output.
float m_mix
Interpolation coefficient between existing and incoming data (0.0-1.0)
std::shared_ptr< Nodes::Node > m_node
Source node that generates sequential data values.
void processing_function(const std::shared_ptr< Buffer > &buffer) override
Captures node computation output into a buffer.
std::vector< double > get_node_data(uint32_t num_samples)
Gets a batch of data from the node.
void on_detach(const std::shared_ptr< Buffer > &buffer) override
Called when this processor is detached from a buffer.
std::vector< double > extract_multiple_samples(const std::shared_ptr< Nodes::Node > &node, size_t num_samples)
Extract multiple samples from a node into a vector.
ProcessingToken
Bitfield enum defining processing characteristics and backend requirements for buffer operations.
void update_buffer_with_node_data(const std::shared_ptr< Nodes::Node > &node, std::span< double > buffer, double mix)
Apply node output to an existing buffer with mixing.
@ BufferProcessing
Buffer processing (Buffers::BufferManager, processing chains)
@ Buffers
Buffers, Managers, processors and processing chains.
std::vector< double > mix(const std::vector< std::vector< double > > &streams)
Mix multiple data streams with equal weighting.