MayaFlux 1.0.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ process_sample()

double MayaFlux::Nodes::Generator::Phasor::process_sample ( double  input = 0.)
overridevirtual

Processes a single input sample and generates a phasor sample.

Parameters
inputInput sample (used for modulation when modulators are connected)
Returns
Generated phasor sample (ramp from 0 to amplitude)

This method advances the generator's phase and computes the next sample of the phasor ramp, applying any modulation from connected nodes.

Implements MayaFlux::Nodes::Node.

Definition at line 81 of file Phasor.cpp.

82{
83 double output = 0.0;
84 m_phase_wrapped = false;
85
86 double effective_freq = m_frequency;
87
90 uint32_t state = m_frequency_modulator->m_state.load();
91 if (state & NodeState::PROCESSED) {
92 effective_freq += m_frequency_modulator->get_last_output();
93 } else {
94 effective_freq = m_frequency_modulator->process_sample(0.F);
96 }
97
98 update_phase_increment(effective_freq);
99 }
100
101 output = m_phase * m_amplitude;
102
105 uint32_t state = m_amplitude_modulator->m_state.load();
106 if (state & NodeState::PROCESSED) {
107 output *= m_amplitude_modulator->get_last_output();
108 } else {
109 output *= m_amplitude_modulator->process_sample(0.F);
111 }
112 }
113
114 output += m_offset;
115
117 if (m_phase >= 1.0) {
118 m_phase -= 1.0;
119 m_phase_wrapped = true;
120 }
121
122 m_last_output = output;
123
125 && !m_networked_node) {
126 notify_tick(output);
127 }
128
132 }
136 }
137
138 return output;
139}
float m_frequency
Base frequency of the generator.
double m_amplitude
Base amplitude of the generator.
double m_phase
Current phase of the generator.
std::shared_ptr< Node > m_frequency_modulator
Node that modulates the frequency.
Definition Phasor.hpp:279
bool m_phase_wrapped
Flag indicating whether the phase has wrapped in the current sample.
Definition Phasor.hpp:308
std::shared_ptr< Node > m_amplitude_modulator
Node that modulates the amplitude.
Definition Phasor.hpp:284
void update_phase_increment(double frequency)
Updates the phase increment based on a new frequency.
Definition Phasor.cpp:60
double m_phase_inc
Phase increment per sample.
Definition Phasor.hpp:269
void notify_tick(double value) override
Notifies all registered callbacks about a new sample.
Definition Phasor.cpp:188
float m_offset
DC offset added to the output.
Definition Phasor.hpp:274
bool m_state_saved
tracks if the node's state has been saved by a snapshot operation
Definition Node.hpp:498
bool m_networked_node
Flag indicating if the node is part of a NodeNetwork This flag is used to disable event firing when t...
Definition Node.hpp:493
double m_last_output
The most recent sample value generated by this oscillator.
Definition Node.hpp:441
bool m_fire_events_during_snapshot
Internal flag controlling whether notify_tick fires during state snapshots Default: false (events don...
Definition Node.hpp:528
@ PROCESSED
Node has been processed this cycle.
Definition NodeSpec.hpp:49
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.
void atomic_add_flag(std::atomic< NodeState > &state, NodeState flag)
Atomically adds a flag to a node state.

References MayaFlux::Nodes::atomic_add_flag(), MayaFlux::Nodes::atomic_dec_modulator_count(), MayaFlux::Nodes::atomic_inc_modulator_count(), MayaFlux::Nodes::Generator::Generator::m_amplitude, m_amplitude_modulator, MayaFlux::Nodes::Node::m_fire_events_during_snapshot, MayaFlux::Nodes::Generator::Generator::m_frequency, m_frequency_modulator, MayaFlux::Nodes::Node::m_last_output, MayaFlux::Nodes::Node::m_networked_node, m_offset, MayaFlux::Nodes::Generator::Generator::m_phase, m_phase_inc, m_phase_wrapped, MayaFlux::Nodes::Node::m_state_saved, notify_tick(), MayaFlux::Nodes::PROCESSED, MayaFlux::Nodes::try_reset_processed_state(), and update_phase_increment().

Referenced by process_batch().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: