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

Fixed-state controller for deterministic delay read-time modulation. More...

#include <tempo_delay.hpp>

Public Member Functions

TempoDelayError prepare (double sample_rate, double maximum_delay_samples, std::uint32_t transition_samples=kDefaultTransitionSamples) noexcept
TempoDelayError set_delay_samples (double samples) noexcept
 Adopt a direct fractional-sample target.
TempoDelayError set_tempo (timebase::BeatDivision division, double beats_per_minute) noexcept
 Convert and adopt a musical target transactionally.
double next () noexcept
void render (double *output, std::size_t sample_count) noexcept
void reset () noexcept
bool prepared () const noexcept
bool initialized () const noexcept
bool transition_active () const noexcept
std::uint32_t remaining_transition_samples () const noexcept
double sample_rate () const noexcept
double maximum_delay_samples () const noexcept
double current_delay_samples () const noexcept
double target_delay_samples () const noexcept
double conservative_delay_samples () const noexcept

Static Public Member Functions

static constexpr int latency_samples () noexcept
static constexpr int tail_samples () noexcept

Static Public Attributes

static constexpr std::uint32_t kDefaultTransitionSamples = 64

Detailed Description

Fixed-state controller for deterministic delay read-time modulation.

The first valid setting after prepare() is adopted immediately. Later settings linearly move the published fractional delay over exactly transition_samples: the first next() returns 1/N of the move and the Nth returns the exact target. Retargeting starts from the current published value. reset() collapses an active transition to its target without changing configuration, which makes transport restarts deterministic.

This controller owns no audio history, feedback, routing, or tempo map. Consumers pass next() to their existing fractional-delay/read-head API. This is a linear read-time glide, so large moves can produce a pitch sweep; an audio engine that requires a click-free jump owns the dual-read-head crossfade rather than this control-only helper. Consequently it introduces zero audio latency and zero audio tail. Prepared setters, stepping, block rendering, reset, and inspection allocate no memory, lock nothing, perform no I/O, and throw no exceptions.

Member Function Documentation

◆ conservative_delay_samples()

double pulp::signal::TempoDelayTime::conservative_delay_samples ( ) const
inlinenodiscardnoexcept

◆ current_delay_samples()

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

◆ initialized()

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

◆ latency_samples()

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

◆ maximum_delay_samples()

double pulp::signal::TempoDelayTime::maximum_delay_samples ( ) const
inlinenodiscardnoexcept

◆ next()

double pulp::signal::TempoDelayTime::next ( )
inlinenodiscardnoexcept

◆ prepare()

TempoDelayError pulp::signal::TempoDelayTime::prepare ( double sample_rate,
double maximum_delay_samples,
std::uint32_t transition_samples = kDefaultTransitionSamples )
inlinenodiscardnoexcept

◆ prepared()

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

◆ remaining_transition_samples()

std::uint32_t pulp::signal::TempoDelayTime::remaining_transition_samples ( ) const
inlinenodiscardnoexcept

◆ render()

void pulp::signal::TempoDelayTime::render ( double * output,
std::size_t sample_count )
inlinenoexcept

◆ reset()

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

◆ sample_rate()

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

◆ set_delay_samples()

TempoDelayError pulp::signal::TempoDelayTime::set_delay_samples ( double samples)
inlinenodiscardnoexcept

Adopt a direct fractional-sample target.

Rejected updates preserve the complete current transition.

◆ set_tempo()

TempoDelayError pulp::signal::TempoDelayTime::set_tempo ( timebase::BeatDivision division,
double beats_per_minute )
inlinenodiscardnoexcept

Convert and adopt a musical target transactionally.

Conversion or capacity failure leaves the current target and transition untouched.

◆ tail_samples()

constexpr int pulp::signal::TempoDelayTime::tail_samples ( )
inlinestaticnodiscardconstexprnoexcept

◆ target_delay_samples()

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

◆ transition_active()

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

Member Data Documentation

◆ kDefaultTransitionSamples

std::uint32_t pulp::signal::TempoDelayTime::kDefaultTransitionSamples = 64
staticconstexpr

The documentation for this class was generated from the following file:
  • /home/runner/work/pulp/pulp/core/signal/include/pulp/signal/tempo_delay.hpp