31 std::span<double> input_buffer,
32 std::span<double> output_buffer,
33 const std::vector<double>& coefficients)
36 , m_buffer_size(buffer_size)
37 , m_input_buffer(input_buffer)
38 , m_output_buffer(output_buffer)
39 , m_coefficients(coefficients)
71 [[nodiscard]]
const std::vector<double>&
get_coefficients()
const {
return m_coefficients; }
91 std::span<double> input_buffer,
92 std::span<double> output_buffer,
93 const std::vector<double>& coefficients,
94 std::span<const float> gpu_data)
95 :
PolynomialContext(value, mode, buffer_size, input_buffer, output_buffer, coefficients)
150 explicit Polynomial(
const std::vector<double>& coefficients);
159 explicit Polynomial(DirectFunction function);
171 Polynomial(BufferFunction function, PolynomialMode mode,
size_t buffer_size);
182 double process_sample(
double input = 0.)
override;
192 std::vector<double> process_batch(
unsigned int num_samples)
override;
208 void set_coefficients(
const std::vector<double>& coefficients);
235 void set_initial_conditions(
const std::vector<double>& initial_values);
246 DirectFunction create_polynomial_function(
const std::vector<double>& coefficients);
254 inline void set_input_node(
const std::shared_ptr<Node>& input_node) { m_input_node = input_node; }
272 [[nodiscard]]
const std::vector<double>&
get_coefficients()
const {
return m_coefficients; }
278 [[nodiscard]] std::span<double>
get_input_buffer() {
return { m_linear_view.data(), m_ring_count }; }
284 [[nodiscard]] std::span<double>
get_output_buffer() {
return { m_linear_view.data(), m_ring_count }; }
303 inline void set_amplitude(
double amplitude)
override { m_scale_factor = amplitude; }
312 [[nodiscard]]
inline double get_amplitude()
const override {
return m_scale_factor; }
314 void save_state()
override;
315 void restore_state()
override;
327 m_external_buffer_context = buffer_view;
328 m_use_external_context =
true;
336 m_use_external_context =
false;
337 m_external_buffer_context = {};
342 return m_use_external_context;
360 void update_context(
double value)
override;
370 void notify_tick(
double value)
override;
391 size_t m_ring_head {};
392 size_t m_ring_count {};
395 size_t m_saved_ring_head {};
396 size_t m_saved_ring_count {};
397 size_t m_buffer_size {};
400 size_t m_current_buffer_position {};
402 double m_saved_last_output {};
403 bool m_use_external_context {};
408 void ring_push(
double val);
412 std::span<double> linearized_view();
414 std::span<double> external_context_view(
double input);
Base class for all signal and pattern generators in Maya Flux.
PolynomialContextGpu(double value, PolynomialMode mode, size_t buffer_size, std::span< double > input_buffer, std::span< double > output_buffer, const std::vector< double > &coefficients, std::span< const float > gpu_data)
std::span< double > get_output_buffer() const
Gets the output buffer.
size_t m_buffer_size
Size of the buffers.
const std::vector< double > & m_coefficients
Copy of polynomial coefficients.
const std::vector< double > & get_coefficients() const
Gets the polynomial coefficients.
std::span< double > m_output_buffer
Copy of output buffer.
PolynomialMode m_mode
Current processing mode.
PolynomialContext(double value, PolynomialMode mode, size_t buffer_size, std::span< double > input_buffer, std::span< double > output_buffer, const std::vector< double > &coefficients)
Constructs a PolynomialContext.
std::span< double > m_input_buffer
Copy of input buffer.
std::span< double > get_input_buffer() const
Gets the input buffer.
size_t get_buffer_size() const
Gets the buffer size.
PolynomialMode get_mode() const
Gets the current polynomial mode.
std::function< double(std::span< double >)> BufferFunction
Function type for recursive/feedforward polynomial evaluation.
PolynomialMode m_mode
Converts coefficient vector to a polynomial function.
void set_amplitude(double amplitude) override
Sets the scaling factor for the output values.
PolynomialMode get_mode() const
Gets the current polynomial mode.
std::vector< double > m_ring_data
bool using_external_context() const
void set_input_node(const std::shared_ptr< Node > &input_node)
Sets the input node to generate polynomial values from.
~Polynomial() override=default
void set_buffer_context(std::span< double > buffer_view)
Uses an external buffer context for processing.
void printCurrent() override
Prints the current state and parameters.
PolynomialContextGpu m_context_gpu
const std::vector< double > & get_coefficients() const
Gets the polynomial coefficients.
std::vector< double > m_saved_ring_data
double get_amplitude() const override
Gets the current amplitude scaling factor.
double m_scale_factor
Scaling factor for output.
std::span< double > m_external_buffer_context
size_t get_buffer_size() const
Gets the buffer size.
void clear_buffer_context()
Clear external buffer context, resume internal accumulation.
std::vector< double > m_linear_view
BufferFunction m_buffer_function
Function for recursive/feedforward mode.
std::shared_ptr< Node > m_input_node
Input node for processing.
std::span< double > get_output_buffer()
Gets the output buffer.
std::function< double(double)> DirectFunction
Function type for direct polynomial evaluation.
DirectFunction m_direct_function
Function for direct mode.
PolynomialContext m_context
void printGraph() override
Prints a visual representation of the polynomial function.
std::span< double > get_input_buffer()
Gets the input buffer.
std::vector< double > m_coefficients
Polynomial coefficients (if using coefficient-based definition)
Generator that produces values based on polynomial functions.
GPU-uploadable 1D array data interface.
Base context class for node callbacks.
@ DIRECT
Stateless evaluation of current input only (combinational logic)
PolynomialMode
Defines how the polynomial function processes input values.
@ RECURSIVE
Evaluates using current and previous outputs: y[n] = f(y[n-1], y[n-2], ...)
@ FEEDFORWARD
Evaluates using current and previous inputs: y[n] = f(x[n], x[n-1], ...)