11 sample =
m_filter->process_sample(sample);
16 uint32_t state =
m_filter->m_state.load();
19 sample =
m_filter->get_last_output();
21 sample =
m_filter->process_sample(sample);
34 auto audio_buffer = std::dynamic_pointer_cast<AudioBuffer>(buffer);
35 if (!audio_buffer || audio_buffer->get_data().empty())
44 auto& data = audio_buffer->get_data();
46 const auto& state =
m_filter->m_state.load();
49 for (
size_t i = 0; i < data.size(); ++i) {
50 m_filter->set_input_context(std::span<double>(data.data(), i));
51 data[i] =
m_filter->process_sample(data[i]);
55 for (
size_t i = 0; i < data.size(); ++i) {
56 m_filter->set_input_context(std::span<double>(data.data(), i));
57 data[i] =
m_filter->process_sample(data[i]);
void processing_function(const std::shared_ptr< Buffer > &buffer) override
The core processing function that must be implemented by derived classes.
std::shared_ptr< Nodes::Filters::Filter > m_pending_filter
void on_attach(const std::shared_ptr< Buffer > &buffer) override
Called when this processor is attached to a buffer.
void process_single_sample(double &sample)
std::shared_ptr< Nodes::Filters::Filter > m_filter
void atomic_add_flag(std::atomic< Utils::NodeState > &state, Utils::NodeState flag)
Atomically adds a flag to a node state.
void try_reset_processed_state(std::shared_ptr< Node > node)
Attempts to reset the processed state of a node.
void atomic_inc_modulator_count(std::atomic< uint32_t > &count, int amount)
Atomically increments the modulator count by a specified amount.
void atomic_dec_modulator_count(std::atomic< uint32_t > &count, int amount)
Atomically decrements the modulator count by a specified amount.
@ INACTIVE
Engine is not processing this node.
@ PROCESSED
Node has been processed this cycle.