Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
pulp::signal::TempoDelayWrapper Class Reference

A wet-only, stereo delay that owns its histories and feedback routes. More...

#include <tempo_delay_wrapper.hpp>

Public Member Functions

 TempoDelayWrapper ()=default
 TempoDelayWrapper (const TempoDelayWrapper &)=delete
TempoDelayWrapper & operator= (const TempoDelayWrapper &)=delete
TempoDelayWrapperError prepare (double sample_rate, std::size_t maximum_delay_samples, TempoDelayWrapperInterpolation interpolation=TempoDelayWrapperInterpolation::lagrange3, std::uint32_t transition_samples=64)
TempoDelayWrapperError set_delay_samples (double samples) noexcept
TempoDelayWrapperError set_delay_samples (double left_samples, double right_samples) noexcept
TempoDelayWrapperError set_tempo (timebase::BeatDivision division, double beats_per_minute) noexcept
TempoDelayWrapperError set_feedback (double feedback) noexcept
TempoDelayWrapperError set_crossfeed (double crossfeed) noexcept
TempoDelayWrapperProcessResult process (float *left, float *right, std::size_t frame_count) noexcept
void reset () noexcept
bool prepared () const noexcept
bool initialized () const noexcept
double sample_rate () const noexcept
std::size_t maximum_delay_samples () const noexcept
double current_delay_samples () const noexcept
double target_delay_samples () const noexcept
double current_right_delay_samples () const noexcept
double target_right_delay_samples () const noexcept
bool transition_active () const noexcept
double feedback () const noexcept
double crossfeed () const noexcept
TempoDelayWrapperInterpolation interpolation () const noexcept
int tail_samples () const noexcept

Static Public Member Functions

static constexpr int latency_samples () noexcept

Static Public Attributes

static constexpr double kMaximumFeedback = 0.98
static constexpr std::size_t kMinimumCapacitySamples = 3

Detailed Description

A wet-only, stereo delay that owns its histories and feedback routes.

Preparation is the only allocating operation. The audio path is bounded, noexcept, and partition invariant: each sample reads the old history, crossfades fixed old/new read heads during a retime, then commits the input plus the bounded feedback route. Tempo and division updates are transactional and can be published by a control owner before the next audio block.

Delay changes use two fixed read heads and an amplitude crossfade. They never sweep one read head through a changing delay, so a tempo move cannot become a pitch glide. A delay has zero direct-path latency. With feedback disabled its tail is one configured delay; with feedback enabled it is mathematically unbounded and tail_samples() returns -1.

Constructor & Destructor Documentation

◆ TempoDelayWrapper() [1/2]

pulp::signal::TempoDelayWrapper::TempoDelayWrapper ( )
default

◆ TempoDelayWrapper() [2/2]

pulp::signal::TempoDelayWrapper::TempoDelayWrapper ( const TempoDelayWrapper & )
delete

Member Function Documentation

◆ crossfeed()

double pulp::signal::TempoDelayWrapper::crossfeed ( ) const
inlinenodiscardnoexcept

◆ current_delay_samples()

double pulp::signal::TempoDelayWrapper::current_delay_samples ( ) const
inlinenodiscardnoexcept

◆ current_right_delay_samples()

double pulp::signal::TempoDelayWrapper::current_right_delay_samples ( ) const
inlinenodiscardnoexcept

◆ feedback()

double pulp::signal::TempoDelayWrapper::feedback ( ) const
inlinenodiscardnoexcept

◆ initialized()

bool pulp::signal::TempoDelayWrapper::initialized ( ) const
inlinenodiscardnoexcept

◆ interpolation()

TempoDelayWrapperInterpolation pulp::signal::TempoDelayWrapper::interpolation ( ) const
inlinenodiscardnoexcept

◆ latency_samples()

constexpr int pulp::signal::TempoDelayWrapper::latency_samples ( )
inlinestaticnodiscardconstexprnoexcept

◆ maximum_delay_samples()

std::size_t pulp::signal::TempoDelayWrapper::maximum_delay_samples ( ) const
inlinenodiscardnoexcept

◆ operator=()

TempoDelayWrapper & pulp::signal::TempoDelayWrapper::operator= ( const TempoDelayWrapper & )
delete

◆ prepare()

TempoDelayWrapperError pulp::signal::TempoDelayWrapper::prepare ( double sample_rate,
std::size_t maximum_delay_samples,
TempoDelayWrapperInterpolation interpolation = TempoDelayWrapperInterpolation::lagrange3,
std::uint32_t transition_samples = 64 )
inlinenodiscard

◆ prepared()

bool pulp::signal::TempoDelayWrapper::prepared ( ) const
inlinenodiscardnoexcept

◆ process()

TempoDelayWrapperProcessResult pulp::signal::TempoDelayWrapper::process ( float * left,
float * right,
std::size_t frame_count )
inlinenodiscardnoexcept

◆ reset()

void pulp::signal::TempoDelayWrapper::reset ( )
inlinenoexcept

◆ sample_rate()

double pulp::signal::TempoDelayWrapper::sample_rate ( ) const
inlinenodiscardnoexcept

◆ set_crossfeed()

TempoDelayWrapperError pulp::signal::TempoDelayWrapper::set_crossfeed ( double crossfeed)
inlinenodiscardnoexcept

◆ set_delay_samples() [1/2]

TempoDelayWrapperError pulp::signal::TempoDelayWrapper::set_delay_samples ( double left_samples,
double right_samples )
inlinenodiscardnoexcept

◆ set_delay_samples() [2/2]

TempoDelayWrapperError pulp::signal::TempoDelayWrapper::set_delay_samples ( double samples)
inlinenodiscardnoexcept

◆ set_feedback()

TempoDelayWrapperError pulp::signal::TempoDelayWrapper::set_feedback ( double feedback)
inlinenodiscardnoexcept

◆ set_tempo()

TempoDelayWrapperError pulp::signal::TempoDelayWrapper::set_tempo ( timebase::BeatDivision division,
double beats_per_minute )
inlinenodiscardnoexcept

◆ tail_samples()

int pulp::signal::TempoDelayWrapper::tail_samples ( ) const
inlinenodiscardnoexcept

◆ target_delay_samples()

double pulp::signal::TempoDelayWrapper::target_delay_samples ( ) const
inlinenodiscardnoexcept

◆ target_right_delay_samples()

double pulp::signal::TempoDelayWrapper::target_right_delay_samples ( ) const
inlinenodiscardnoexcept

◆ transition_active()

bool pulp::signal::TempoDelayWrapper::transition_active ( ) const
inlinenodiscardnoexcept

Member Data Documentation

◆ kMaximumFeedback

double pulp::signal::TempoDelayWrapper::kMaximumFeedback = 0.98
staticconstexpr

◆ kMinimumCapacitySamples

std::size_t pulp::signal::TempoDelayWrapper::kMinimumCapacitySamples = 3
staticconstexpr

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