7 const std::shared_ptr<Nodes::Generator::Polynomial>& polynomial,
10 : m_polynomial(polynomial)
11 , m_process_mode(mode)
12 , m_window_size(window_size)
25 for (
double& i : data) {
30 for (
double& i : data) {
39 if (!
m_polynomial || !buffer || std::dynamic_pointer_cast<AudioBuffer>(buffer)->get_data().empty()) {
48 auto& data = std::dynamic_pointer_cast<AudioBuffer>(buffer)->get_data();
52 process_span(std::span<double>(data.data(), data.size()));
57 process_span(std::span<double>(data.data(), data.size()));
61 std::span<double> data_span { data };
62 for (
size_t window_start = 0; window_start < data_span.size(); window_start +=
m_window_size) {
64 size_t window_size = std::min(
m_window_size, data_span.size() - window_start);
65 process_span(data_span.subspan(window_start, window_size));
70 m_polynomial->set_buffer_context(std::span<double>(data.data(), data.size()));
71 process_span(std::span<double>(data.data(), data.size()));
void processing_function(std::shared_ptr< Buffer > buffer) override
Processes an audio buffer using the polynomial function.
bool m_use_internal
Whether to use the buffer's internal previous state.
void process_span(std::span< double > data)
Processes a span of data using the polynomial function.
size_t m_window_size
Window size for windowed processing.
ProcessMode
Processing mode for the polynomial processor.
@ BATCH
Process the entire buffer at once.
@ SAMPLE_BY_SAMPLE
Process each sample individually.
@ WINDOWED
Process using a sliding window.
@ BUFFER_CONTEXT
Process each sample with access to buffer history.
PolynomialProcessor()=default
std::shared_ptr< Nodes::Generator::Polynomial > m_pending_polynomial
Internal polynomial node.
void on_attach(std::shared_ptr< Buffer > buffer) override
Called when the processor is attached to a buffer.
std::shared_ptr< Nodes::Generator::Polynomial > m_polynomial
Polynomial node for processing.
ProcessMode m_process_mode
Current processing mode.
@ INACTIVE
Engine is not processing this node.