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

◆ process_bidirectional()

void MayaFlux::Nodes::Network::WaveguideNetwork::process_bidirectional ( WaveguideSegment &  seg,
unsigned int  num_samples,
std::vector< double > &  out 
)
private

Definition at line 258 of file WaveguideNetwork.cpp.

260{
261 const bool continuous = m_exciter_active
263 const double continuous_gain = continuous
264 ? 1.0 / seg.loss_factor
265 : 1.0;
266 DriveLimiter limiter(m_delay_length_integer);
267
268 for (unsigned int i = 0; i < num_samples; ++i) {
269 const double exciter = generate_exciter_sample();
270
271 const double plus_end = read_with_interpolation(
273
274 const double minus_end = read_with_interpolation(
276
277 auto* filt_open = seg.loop_filter_open ? seg.loop_filter_open.get()
278 : seg.loop_filter.get();
279 auto* filt_closed = seg.loop_filter_closed ? seg.loop_filter_closed.get()
280 : seg.loop_filter.get();
281
282 const double filtered_plus = (!continuous && filt_open)
283 ? filt_open->process_sample(plus_end)
284 : plus_end;
285 const double filtered_minus = (!continuous && filt_closed)
286 ? filt_closed->process_sample(minus_end)
287 : minus_end;
288
289 const double returning = filtered_minus * seg.loss_factor * seg.reflection_closed * continuous_gain;
290 const double drive = continuous ? exciter * limiter.gain(seg) : exciter;
291
292 seg.p_minus.push(filtered_plus * seg.loss_factor * seg.reflection_open * continuous_gain);
293 seg.p_plus.push(drive + returning);
294
295 out[i] = observe_sample(seg);
296 }
297}
std::vector< float > * out
double observe_sample(const WaveguideSegment &seg) const
double read_with_interpolation(const Memory::HistoryBuffer< double > &delay, size_t integer_part, double fraction) const
Read from delay line with linear fractional interpolation.
@ CONTINUOUS
External node as continuous exciter (bowing)

References CONTINUOUS, generate_exciter_sample(), MayaFlux::Nodes::Network::WaveguideNetwork::WaveguideSegment::loop_filter, MayaFlux::Nodes::Network::WaveguideNetwork::WaveguideSegment::loop_filter_closed, MayaFlux::Nodes::Network::WaveguideNetwork::WaveguideSegment::loop_filter_open, MayaFlux::Nodes::Network::WaveguideNetwork::WaveguideSegment::loss_factor, m_delay_length_fraction, m_delay_length_integer, m_exciter_active, m_exciter_node, m_exciter_type, observe_sample(), out, MayaFlux::Nodes::Network::WaveguideNetwork::WaveguideSegment::p_minus, MayaFlux::Nodes::Network::WaveguideNetwork::WaveguideSegment::p_plus, MayaFlux::Memory::HistoryBuffer< T >::push(), read_with_interpolation(), MayaFlux::Nodes::Network::WaveguideNetwork::WaveguideSegment::reflection_closed, and MayaFlux::Nodes::Network::WaveguideNetwork::WaveguideSegment::reflection_open.

Referenced by process_batch().

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