MayaFlux 0.3.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 80 of file Phasor.cpp.

81{
82 double output = 0.0;
83
84 double effective_freq = m_frequency;
85
88 uint32_t state = m_frequency_modulator->m_state.load();
89 if (state & NodeState::PROCESSED) {
90 effective_freq += m_frequency_modulator->get_last_output();
91 } else {
92 effective_freq = m_frequency_modulator->process_sample(0.F);
94 }
95
96 update_phase_increment(effective_freq);
97 }
98
99 output = m_phase * m_amplitude;
100
103 uint32_t state = m_amplitude_modulator->m_state.load();
104 if (state & NodeState::PROCESSED) {
105 output *= m_amplitude_modulator->get_last_output();
106 } else {
107 output *= m_amplitude_modulator->process_sample(0.F);
109 }
110 }
111
112 output += m_offset;
113
115 if (m_phase >= 1.0) {
116 m_phase -= 1.0;
117 m_phase_wrapped = true;
118 }
119
120 m_last_output = output;
121
123 && !m_networked_node) {
124 notify_tick(output);
125 }
126
130 }
134 }
135
136 return output;
137}
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:304
bool m_phase_wrapped
Flag indicating whether the phase has wrapped in the current sample.
Definition Phasor.hpp:333
std::shared_ptr< Node > m_amplitude_modulator
Node that modulates the amplitude.
Definition Phasor.hpp:309
void update_phase_increment(double frequency)
Updates the phase increment based on a new frequency.
Definition Phasor.cpp:59
double m_phase_inc
Phase increment per sample.
Definition Phasor.hpp:294
void notify_tick(double value) override
Notifies all registered callbacks about a new sample.
Definition Phasor.cpp:201
float m_offset
DC offset added to the output.
Definition Phasor.hpp:299
bool m_state_saved
tracks if the node's state has been saved by a snapshot operation
Definition Node.hpp:429
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:424
double m_last_output
The most recent sample value generated by this oscillator.
Definition Node.hpp:377
bool m_fire_events_during_snapshot
Internal flag controlling whether notify_tick fires during state snapshots Default: false (events don...
Definition Node.hpp:455
@ PROCESSED
Node has been processed this cycle.
Definition NodeSpec.hpp:49
void atomic_add_flag(std::atomic< NodeState > &state, NodeState flag)
Atomically adds a flag to a node state.
Definition NodeUtils.cpp:94
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.

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: