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

A wet-only stereo multitap delay with normalized tap feedback. More...

#include <cross_feedback_multitap_delay.hpp>

Classes

struct  Tap

Public Member Functions

 CrossFeedbackMultitapDelayT () noexcept
bool prepare (double sample_rate, double maximum_delay_ms=2000.0)
bool prepared () const noexcept
double sample_rate () const noexcept
double maximum_delay_ms () const noexcept
std::size_t retained_bytes () const noexcept
void set_active_tap_count (std::size_t count) noexcept
std::size_t active_tap_count () const noexcept
bool set_tap (std::size_t index, Tap tap) noexcept
Tap tap (std::size_t index) const noexcept
void set_feedback_gain (double gain) noexcept
double feedback_gain () const noexcept
void set_cross_feedback (double amount01) noexcept
 Zero is independent same-channel feedback; one is pure cross-channel feedback.
double cross_feedback () const noexcept
double worst_case_feedback_gain () const noexcept
int tail_samples () const noexcept
void reset () noexcept
void process_sample (SampleType input_left, SampleType input_right, SampleType &output_left, SampleType &output_right) noexcept
void process_block (const SampleType *input_left, const SampleType *input_right, SampleType *output_left, SampleType *output_right, std::size_t sample_count) noexcept

Static Public Member Functions

static constexpr int latency_samples () noexcept

Static Public Attributes

static constexpr std::size_t kMaxTaps = 8
static constexpr double kMinimumSampleRate = 1000.0
static constexpr double kMaximumSampleRate = 768000.0
static constexpr double kMaximumDelayMs = 10000.0
static constexpr double kMaximumFeedbackGain = 0.95

Detailed Description

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

A wet-only stereo multitap delay with normalized tap feedback.

Tap configuration and prepare() belong on the control thread. After preparation, processing and reset are bounded, lock-free, and allocation-free. The feedback matrix has absolute row sum abs(feedback_gain()), which is clamped below one. Normalized feedback-tap weights and linear interpolation keep the complete recursive path's infinity norm below one as well.

Constructor & Destructor Documentation

◆ CrossFeedbackMultitapDelayT()

template<typename SampleType = float>
pulp::signal::CrossFeedbackMultitapDelayT< SampleType >::CrossFeedbackMultitapDelayT ( )
inlinenoexcept

Member Function Documentation

◆ active_tap_count()

template<typename SampleType = float>
std::size_t pulp::signal::CrossFeedbackMultitapDelayT< SampleType >::active_tap_count ( ) const
inlinenoexcept

◆ cross_feedback()

template<typename SampleType = float>
double pulp::signal::CrossFeedbackMultitapDelayT< SampleType >::cross_feedback ( ) const
inlinenoexcept

◆ feedback_gain()

template<typename SampleType = float>
double pulp::signal::CrossFeedbackMultitapDelayT< SampleType >::feedback_gain ( ) const
inlinenoexcept

◆ latency_samples()

template<typename SampleType = float>
constexpr int pulp::signal::CrossFeedbackMultitapDelayT< SampleType >::latency_samples ( )
inlinestaticconstexprnoexcept

◆ maximum_delay_ms()

template<typename SampleType = float>
double pulp::signal::CrossFeedbackMultitapDelayT< SampleType >::maximum_delay_ms ( ) const
inlinenoexcept

◆ prepare()

template<typename SampleType = float>
bool pulp::signal::CrossFeedbackMultitapDelayT< SampleType >::prepare ( double sample_rate,
double maximum_delay_ms = 2000.0 )
inlinenodiscard

◆ prepared()

template<typename SampleType = float>
bool pulp::signal::CrossFeedbackMultitapDelayT< SampleType >::prepared ( ) const
inlinenoexcept

◆ process_block()

template<typename SampleType = float>
void pulp::signal::CrossFeedbackMultitapDelayT< SampleType >::process_block ( const SampleType * input_left,
const SampleType * input_right,
SampleType * output_left,
SampleType * output_right,
std::size_t sample_count )
inlinenoexcept

◆ process_sample()

template<typename SampleType = float>
void pulp::signal::CrossFeedbackMultitapDelayT< SampleType >::process_sample ( SampleType input_left,
SampleType input_right,
SampleType & output_left,
SampleType & output_right )
inlinenoexcept

◆ reset()

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

◆ retained_bytes()

template<typename SampleType = float>
std::size_t pulp::signal::CrossFeedbackMultitapDelayT< SampleType >::retained_bytes ( ) const
inlinenoexcept

◆ sample_rate()

template<typename SampleType = float>
double pulp::signal::CrossFeedbackMultitapDelayT< SampleType >::sample_rate ( ) const
inlinenoexcept

◆ set_active_tap_count()

template<typename SampleType = float>
void pulp::signal::CrossFeedbackMultitapDelayT< SampleType >::set_active_tap_count ( std::size_t count)
inlinenoexcept

◆ set_cross_feedback()

template<typename SampleType = float>
void pulp::signal::CrossFeedbackMultitapDelayT< SampleType >::set_cross_feedback ( double amount01)
inlinenoexcept

Zero is independent same-channel feedback; one is pure cross-channel feedback.

Intermediate values form a convex stereo feedback matrix.

◆ set_feedback_gain()

template<typename SampleType = float>
void pulp::signal::CrossFeedbackMultitapDelayT< SampleType >::set_feedback_gain ( double gain)
inlinenoexcept

◆ set_tap()

template<typename SampleType = float>
bool pulp::signal::CrossFeedbackMultitapDelayT< SampleType >::set_tap ( std::size_t index,
Tap tap )
inlinenodiscardnoexcept

◆ tail_samples()

template<typename SampleType = float>
int pulp::signal::CrossFeedbackMultitapDelayT< SampleType >::tail_samples ( ) const
inlinenoexcept

◆ tap()

template<typename SampleType = float>
Tap pulp::signal::CrossFeedbackMultitapDelayT< SampleType >::tap ( std::size_t index) const
inlinenoexcept

◆ worst_case_feedback_gain()

template<typename SampleType = float>
double pulp::signal::CrossFeedbackMultitapDelayT< SampleType >::worst_case_feedback_gain ( ) const
inlinenoexcept

Member Data Documentation

◆ kMaximumDelayMs

template<typename SampleType = float>
double pulp::signal::CrossFeedbackMultitapDelayT< SampleType >::kMaximumDelayMs = 10000.0
staticconstexpr

◆ kMaximumFeedbackGain

template<typename SampleType = float>
double pulp::signal::CrossFeedbackMultitapDelayT< SampleType >::kMaximumFeedbackGain = 0.95
staticconstexpr

◆ kMaximumSampleRate

template<typename SampleType = float>
double pulp::signal::CrossFeedbackMultitapDelayT< SampleType >::kMaximumSampleRate = 768000.0
staticconstexpr

◆ kMaxTaps

template<typename SampleType = float>
std::size_t pulp::signal::CrossFeedbackMultitapDelayT< SampleType >::kMaxTaps = 8
staticconstexpr

◆ kMinimumSampleRate

template<typename SampleType = float>
double pulp::signal::CrossFeedbackMultitapDelayT< SampleType >::kMinimumSampleRate = 1000.0
staticconstexpr

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