|
MayaFlux 0.2.0
Digital-First Multimedia Processing Framework
|
Generator that produces values based on polynomial functions. More...
#include <Polynomial.hpp>
Inheritance diagram for MayaFlux::Nodes::Generator::Polynomial:
Collaboration diagram for MayaFlux::Nodes::Generator::Polynomial:Public Types | |
| using | DirectFunction = std::function< double(double)> |
| Function type for direct polynomial evaluation. | |
| using | BufferFunction = std::function< double(std::span< double >)> |
| Function type for recursive/feedforward polynomial evaluation. | |
Public Member Functions | |
| Polynomial (const std::vector< double > &coefficients) | |
| Constructs a Polynomial generator in direct mode with coefficient-based definition. | |
| Polynomial (DirectFunction function) | |
| Constructs a Polynomial generator in direct mode with a custom function. | |
| Polynomial (BufferFunction function, PolynomialMode mode, size_t buffer_size) | |
| Constructs a Polynomial generator in recursive or feedforward mode. | |
| ~Polynomial () override=default | |
| double | process_sample (double input=0.) override |
| Processes a single sample. | |
| std::vector< double > | process_batch (unsigned int num_samples) override |
| Processes multiple samples at once. | |
| void | reset () |
| Resets the generator to its initial state. | |
| void | set_coefficients (const std::vector< double > &coefficients) |
| Sets the polynomial coefficients (for direct mode) | |
| void | set_direct_function (DirectFunction function) |
| Sets a custom direct function. | |
| void | set_buffer_function (BufferFunction function, PolynomialMode mode, size_t buffer_size) |
| Sets a custom buffer function. | |
| void | set_initial_conditions (const std::vector< double > &initial_values) |
| Sets initial conditions for recursive mode. | |
| DirectFunction | create_polynomial_function (const std::vector< double > &coefficients) |
| Creates a polynomial function from coefficients. | |
| void | set_input_node (const std::shared_ptr< Node > &input_node) |
| Sets the input node to generate polynomial values from. | |
| PolynomialMode | get_mode () const |
| Gets the current polynomial mode. | |
| size_t | get_buffer_size () const |
| Gets the buffer size. | |
| const std::vector< double > & | get_coefficients () const |
| Gets the polynomial coefficients. | |
| std::span< double > | get_input_buffer () |
| Gets the input buffer. | |
| std::span< double > | get_output_buffer () |
| Gets the output buffer. | |
| void | printGraph () override |
| Prints a visual representation of the polynomial function. | |
| void | printCurrent () override |
| Prints the current state and parameters. | |
| void | set_amplitude (double amplitude) override |
| Sets the scaling factor for the output values. | |
| double | get_amplitude () const override |
| Gets the current amplitude scaling factor. | |
| void | save_state () override |
| Saves the node's current state for later restoration Recursively cascades through all connected modulator nodes Protected - only NodeSourceProcessor and NodeBuffer can call. | |
| void | restore_state () override |
| Restores the node's state from the last save Recursively cascades through all connected modulator nodes Protected - only NodeSourceProcessor and NodeBuffer can call. | |
| void | set_buffer_context (std::span< double > buffer_view) |
| Uses an external buffer context for processing. | |
| void | clear_buffer_context () |
| Clear external buffer context, resume internal accumulation. | |
| bool | using_external_context () const |
| NodeContext & | get_last_context () override |
| Retrieves the last created context object. | |
Public Member Functions inherited from MayaFlux::Nodes::Generator::Generator | |
| virtual | ~Generator ()=default |
| Virtual destructor for proper cleanup. | |
| virtual void | enable_mock_process (bool mock_process) |
| Allows RootNode to process the Generator without using the processed sample. | |
| virtual bool | should_mock_process () const |
| Checks if the generator should mock process. | |
| virtual void | set_frequency (float frequency) |
| Sets the generator's frequency. | |
Public Member Functions inherited from MayaFlux::Nodes::Node | |
| virtual | ~Node ()=default |
| Virtual destructor for proper cleanup of derived classes. | |
| virtual void | on_tick (const NodeHook &callback) |
| Registers a callback to be called on each tick. | |
| virtual void | on_tick_if (const NodeCondition &condition, const NodeHook &callback) |
| Registers a conditional callback. | |
| virtual bool | remove_hook (const NodeHook &callback) |
| Removes a previously registered callback. | |
| virtual bool | remove_conditional_hook (const NodeCondition &callback) |
| Removes a previously registered conditional callback. | |
| virtual void | remove_all_hooks () |
| Removes all registered callbacks. | |
| virtual void | reset_processed_state () |
| Resets the processed state of the node and any attached input nodes. | |
| virtual double | get_last_output () |
| Retrieves the most recent output value produced by the node. | |
| void | register_channel_usage (uint32_t channel_id) |
| Mark the specificed channel as a processor/user. | |
| void | unregister_channel_usage (uint32_t channel_id) |
| Removes the specified channel from the usage tracking. | |
| bool | is_used_by_channel (uint32_t channel_id) const |
| Checks if the node is currently used by a specific channel. | |
| void | request_reset_from_channel (uint32_t channel_id) |
| Requests a reset of the processed state from a specific channel. | |
| const std::atomic< uint32_t > & | get_channel_mask () const |
| Retrieves the current bitmask of active channels using this node. | |
| void | set_gpu_compatible (bool compatible) |
| Sets whether the node is compatible with GPU processing. | |
| bool | is_gpu_compatible () const |
| Checks if the node supports GPU processing. | |
| std::span< const float > | get_gpu_data_buffer () const |
| Provides access to the GPU data buffer. | |
| bool | try_claim_snapshot_context (uint64_t context_id) |
| Attempt to claim snapshot context for this processing cycle. | |
| bool | is_in_snapshot_context (uint64_t context_id) const |
| Check if currently in a snapshot context. | |
| void | release_snapshot_context (uint64_t context_id) |
| Release snapshot context. | |
| bool | has_active_snapshot () const |
| Check if node is currently being snapshotted by any context. | |
| uint64_t | get_active_snapshot_context () const |
| Get the active snapshot context ID. | |
| void | add_buffer_reference () |
| Increments the buffer reference count This method is called when a new buffer starts using this node to ensure proper lifecycle management. | |
| void | remove_buffer_reference () |
| Decrements the buffer reference count This method is called when a buffer stops using this node to ensure proper lifecycle management. | |
| bool | mark_buffer_processed () |
| Marks the node as having been processed by a buffer. | |
| void | request_buffer_reset () |
| Requests a reset of the buffer state. | |
| bool | is_buffer_processed () const |
| Checks if the buffer has been processed. | |
| bool | is_in_network () const |
| Sets whether the node is part of a NodeNetwork. | |
| void | set_in_network (bool networked) |
| Marks the node as being part of a NodeNetwork. | |
Protected Member Functions | |
| void | update_context (double value) override |
| Updates the context object with the current node state. | |
| void | notify_tick (double value) override |
| Notifies all registered callbacks about a new sample. | |
Protected Member Functions inherited from MayaFlux::Nodes::Node | |
| virtual void | reset_processed_state_internal () |
| Resets the processed state of the node directly. | |
Private Member Functions | |
| void | ring_push (double val) |
| double | ring_at (size_t i) |
| std::span< double > | linearized_view () |
| std::span< double > | external_context_view (double input) |
Private Attributes | |
| PolynomialMode | m_mode |
| Converts coefficient vector to a polynomial function. | |
| DirectFunction | m_direct_function |
| Function for direct mode. | |
| BufferFunction | m_buffer_function |
| Function for recursive/feedforward mode. | |
| std::vector< double > | m_coefficients |
| Polynomial coefficients (if using coefficient-based definition) | |
| std::span< double > | m_external_buffer_context |
| std::vector< double > | m_ring_data |
| std::vector< double > | m_linear_view |
| size_t | m_ring_head {} |
| size_t | m_ring_count {} |
| std::vector< double > | m_saved_ring_data |
| size_t | m_saved_ring_head {} |
| size_t | m_saved_ring_count {} |
| size_t | m_buffer_size {} |
| Maximum size of the buffers. | |
| double | m_scale_factor |
| Scaling factor for output. | |
| std::shared_ptr< Node > | m_input_node |
| Input node for processing. | |
| size_t | m_current_buffer_position {} |
| double | m_saved_last_output {} |
| bool | m_use_external_context {} |
| PolynomialContext | m_context |
| PolynomialContextGpu | m_context_gpu |
Additional Inherited Members | |
Public Attributes inherited from MayaFlux::Nodes::Node | |
| bool | m_fire_events_during_snapshot = false |
| Internal flag controlling whether notify_tick fires during state snapshots Default: false (events don't fire during isolated buffer processing) Can be exposed in future if needed via concrete implementation in parent. | |
| std::atomic< Utils::NodeState > | m_state { Utils::NodeState::INACTIVE } |
| Atomic state flag tracking the node's processing status. | |
| std::atomic< uint32_t > | m_modulator_count { 0 } |
| Counter tracking how many other nodes are using this node as a modulator. | |
Protected Attributes inherited from MayaFlux::Nodes::Generator::Generator | |
| double | m_amplitude { 1.0 } |
| Base amplitude of the generator. | |
| float | m_frequency { 440.0F } |
| Base frequency of the generator. | |
| double | m_phase {} |
| Current phase of the generator. | |
| GeneratorContext | m_context { 0., m_frequency, m_amplitude, m_phase } |
| GeneratorContextGpu | m_context_gpu { 0., m_frequency, m_amplitude, m_phase, get_gpu_data_buffer() } |
Protected Attributes inherited from MayaFlux::Nodes::Node | |
| double | m_last_output { 0 } |
| The most recent sample value generated by this oscillator. | |
| bool | m_gpu_compatible {} |
| Flag indicating if the node supports GPU processing This flag is set by derived classes to indicate whether the node can be processed on the GPU. | |
| std::vector< float > | m_gpu_data_buffer |
| GPU data buffer for context objects. | |
| std::vector< NodeHook > | m_callbacks |
| Collection of standard callback functions. | |
| std::vector< std::pair< NodeHook, NodeCondition > > | m_conditional_callbacks |
| Collection of conditional callback functions with their predicates. | |
| bool | m_networked_node {} |
| Flag indicating if the node is part of a NodeNetwork This flag is used to disable event firing when the node is managed within a NodeNetwork, preventing redundant or conflicting event notifications. | |
| bool | m_state_saved {} |
| tracks if the node's state has been saved by a snapshot operation | |
Generator that produces values based on polynomial functions.
The Polynomial generator creates a signal based on mathematical functions that can operate in different modes:
This flexible approach allows implementing various types of polynomial equations, difference equations, and recurrence relations.
Definition at line 115 of file Polynomial.hpp.