Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
pulp::signal::ReedWaveguideLoopT< SampleType > Class Template Reference

Owns and oversamples one complete reed -> bore -> bell feedback loop. More...

#include <reed_waveguide_loop.hpp>

Public Member Functions

bool prepare (double base_sample_rate, double max_one_way_seconds, int oversampling_factor=2)
void set_one_way_seconds (double seconds) noexcept
double target_one_way_seconds () const noexcept
double current_one_way_seconds () const noexcept
double round_trip_seconds () const noexcept
void set_closing_pressure (SampleType value) noexcept
void set_flow_gain (SampleType value) noexcept
void set_bore_impedance (SampleType value) noexcept
void set_bell_reflection_gain (SampleType value) noexcept
void set_bell_loss_pole (SampleType value) noexcept
 Sets the bell pole in the base-rate domain.
SampleType bell_loss_pole () const noexcept
SampleType internal_bell_loss_pole () const noexcept
SampleType process (SampleType mouth_pressure) noexcept
 Returns the pressure wave arriving at the bell before reflection.
int oversampling_factor () const noexcept
int latency_samples () const noexcept
int tail_samples () const noexcept
bool prepared () const noexcept
void reset () noexcept

Static Public Attributes

static constexpr double default_one_way_seconds = 1.0 / (4.0 * 440.0)
static constexpr SampleType maximum_base_rate_bell_loss_pole = SampleType{0.98}

Detailed Description

template<typename SampleType = float>
class pulp::signal::ReedWaveguideLoopT< SampleType >

Owns and oversamples one complete reed -> bore -> bell feedback loop.

The public tuning unit is physical one-way seconds. The internal line runs at base_sample_rate * oversampling_factor, so every oversampled callback reads both boundaries, evaluates them, and advances both rails exactly once. The line delay is resonator state; latency_samples() reports only the linear-phase oversampler's base-rate algorithmic delay.

Member Function Documentation

◆ bell_loss_pole()

template<typename SampleType = float>
SampleType pulp::signal::ReedWaveguideLoopT< SampleType >::bell_loss_pole ( ) const
inlinenodiscardnoexcept

◆ current_one_way_seconds()

template<typename SampleType = float>
double pulp::signal::ReedWaveguideLoopT< SampleType >::current_one_way_seconds ( ) const
inlinenodiscardnoexcept

◆ internal_bell_loss_pole()

template<typename SampleType = float>
SampleType pulp::signal::ReedWaveguideLoopT< SampleType >::internal_bell_loss_pole ( ) const
inlinenodiscardnoexcept

◆ latency_samples()

template<typename SampleType = float>
int pulp::signal::ReedWaveguideLoopT< SampleType >::latency_samples ( ) const
inlinenodiscardnoexcept

◆ oversampling_factor()

template<typename SampleType = float>
int pulp::signal::ReedWaveguideLoopT< SampleType >::oversampling_factor ( ) const
inlinenodiscardnoexcept

◆ prepare()

template<typename SampleType = float>
bool pulp::signal::ReedWaveguideLoopT< SampleType >::prepare ( double base_sample_rate,
double max_one_way_seconds,
int oversampling_factor = 2 )
inlinenodiscard

◆ prepared()

template<typename SampleType = float>
bool pulp::signal::ReedWaveguideLoopT< SampleType >::prepared ( ) const
inlinenodiscardnoexcept

◆ process()

template<typename SampleType = float>
SampleType pulp::signal::ReedWaveguideLoopT< SampleType >::process ( SampleType mouth_pressure)
inlinenodiscardnoexcept

Returns the pressure wave arriving at the bell before reflection.

This is an explicit bore pickup, not a calibrated acoustic-radiation model.

◆ reset()

template<typename SampleType = float>
void pulp::signal::ReedWaveguideLoopT< SampleType >::reset ( )
inlinenoexcept

◆ round_trip_seconds()

template<typename SampleType = float>
double pulp::signal::ReedWaveguideLoopT< SampleType >::round_trip_seconds ( ) const
inlinenodiscardnoexcept

◆ set_bell_loss_pole()

template<typename SampleType = float>
void pulp::signal::ReedWaveguideLoopT< SampleType >::set_bell_loss_pole ( SampleType value)
inlinenoexcept

Sets the bell pole in the base-rate domain.

The owned internal boundary receives pow(pole, 1/factor), preserving physical decay across 1x/2x/4x.

◆ set_bell_reflection_gain()

template<typename SampleType = float>
void pulp::signal::ReedWaveguideLoopT< SampleType >::set_bell_reflection_gain ( SampleType value)
inlinenoexcept

◆ set_bore_impedance()

template<typename SampleType = float>
void pulp::signal::ReedWaveguideLoopT< SampleType >::set_bore_impedance ( SampleType value)
inlinenoexcept

◆ set_closing_pressure()

template<typename SampleType = float>
void pulp::signal::ReedWaveguideLoopT< SampleType >::set_closing_pressure ( SampleType value)
inlinenoexcept

◆ set_flow_gain()

template<typename SampleType = float>
void pulp::signal::ReedWaveguideLoopT< SampleType >::set_flow_gain ( SampleType value)
inlinenoexcept

◆ set_one_way_seconds()

template<typename SampleType = float>
void pulp::signal::ReedWaveguideLoopT< SampleType >::set_one_way_seconds ( double seconds)
inlinenoexcept

◆ tail_samples()

template<typename SampleType = float>
int pulp::signal::ReedWaveguideLoopT< SampleType >::tail_samples ( ) const
inlinenodiscardnoexcept

◆ target_one_way_seconds()

template<typename SampleType = float>
double pulp::signal::ReedWaveguideLoopT< SampleType >::target_one_way_seconds ( ) const
inlinenodiscardnoexcept

Member Data Documentation

◆ default_one_way_seconds

template<typename SampleType = float>
double pulp::signal::ReedWaveguideLoopT< SampleType >::default_one_way_seconds = 1.0 / (4.0 * 440.0)
staticconstexpr

◆ maximum_base_rate_bell_loss_pole

template<typename SampleType = float>
SampleType pulp::signal::ReedWaveguideLoopT< SampleType >::maximum_base_rate_bell_loss_pole = SampleType{0.98}
staticconstexpr

The documentation for this class was generated from the following file: