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

◆ process_batch()

void MayaFlux::Nodes::Network::WaveguideNetwork::process_batch ( unsigned int  num_samples)
overridevirtual

Process the network for the given number of samples.

Parameters
num_samplesNumber of samples/frames to process

Subclasses implement their specific processing logic:

  1. Update internal state (physics, relationships, etc.)
  2. Process individual nodes
  3. Apply inter-node interactions
  4. Aggregate outputs if needed

Called by NodeGraphManager during token processing.

Implements MayaFlux::Nodes::Network::NodeNetwork.

Definition at line 188 of file WaveguideNetwork.cpp.

189{
191
192 if (!is_enabled() || m_segments.empty()) {
193 while (m_audio_buffer_lock.test_and_set(std::memory_order_acquire))
194 std::this_thread::yield();
195
196 m_last_audio_buffer.assign(num_samples, 0.0);
197 m_last_output = 0.0;
198 m_audio_buffer_lock.clear(std::memory_order_release);
199 return;
200 }
201
203
204 thread_local std::vector<double> scratch;
205 scratch.assign(num_samples, 0.0);
206
207 auto& seg = m_segments[0];
208
211 m_exciter_node_buffer_pos, num_samples);
212 }
213
215 process_unidirectional(seg, num_samples, scratch);
216 } else {
217 process_bidirectional(seg, num_samples, scratch);
218 }
219
220 while (m_audio_buffer_lock.test_and_set(std::memory_order_acquire))
221 std::this_thread::yield();
222
223 m_last_audio_buffer.assign(scratch.begin(), scratch.end());
226 m_audio_buffer_lock.clear(std::memory_order_release);
227}
void apply_output_scale()
Apply m_output_scale to m_last_audio_buffer.
bool is_enabled() const
Check if network is enabled.
std::atomic_flag m_audio_buffer_lock
Spinlock guarding m_last_audio_buffer.
void ensure_initialized()
Ensure initialize() is called exactly once.
std::vector< double > m_last_audio_buffer
void process_unidirectional(WaveguideSegment &seg, unsigned int num_samples, std::vector< double > &out)
void process_bidirectional(WaveguideSegment &seg, unsigned int num_samples, std::vector< double > &out)
@ CONTINUOUS
External node as continuous exciter (bowing)
std::vector< WaveguideSegment > m_segments
void extract_node_samples(const std::shared_ptr< Nodes::Node > &node, std::vector< double > &buffer, size_t &buffer_pos, size_t num_samples)
Extract num_samples from node into buffer using snapshot guard.

References MayaFlux::Nodes::Network::NodeNetwork::apply_output_scale(), CONTINUOUS, MayaFlux::Nodes::Network::NodeNetwork::ensure_initialized(), MayaFlux::Nodes::Network::extract_node_samples(), MayaFlux::Nodes::Network::NodeNetwork::is_enabled(), MayaFlux::Nodes::Network::NodeNetwork::m_audio_buffer_lock, m_exciter_active, m_exciter_node, m_exciter_node_buffer, m_exciter_node_buffer_pos, m_exciter_type, MayaFlux::Nodes::Network::NodeNetwork::m_last_audio_buffer, m_last_output, m_segments, process_bidirectional(), process_unidirectional(), MayaFlux::Nodes::Network::WaveguideNetwork::WaveguideSegment::UNIDIRECTIONAL, and update_mapped_parameters().

+ Here is the call graph for this function: