13 sample =
m_filter->process_sample(sample);
18 uint32_t state =
m_filter->m_state.load();
21 sample =
m_filter->get_last_output();
23 sample =
m_filter->process_sample(sample);
36 auto audio_buffer = std::dynamic_pointer_cast<AudioBuffer>(buffer);
37 if (!audio_buffer || audio_buffer->get_data().empty())
46 auto& data = audio_buffer->get_data();
48 const auto& state =
m_filter->m_state.load();
51 for (
size_t i = 0; i < data.size(); ++i) {
52 m_filter->set_input_context(std::span<double>(data.data(), i));
53 data[i] =
m_filter->process_sample(data[i]);
57 for (
size_t i = 0; i < data.size(); ++i) {
58 m_filter->set_input_context(std::span<double>(data.data(), i));
59 data[i] =
m_filter->process_sample(data[i]);
void processing_function(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 process_single_sample(double &sample)
void on_attach(std::shared_ptr< Buffer > buffer) override
Called when this processor is attached to a buffer.
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.