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 |
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.
|
inlinenodiscardnoexcept |
|
inlinenodiscardnoexcept |
|
inlinenodiscardnoexcept |
|
inlinestaticnodiscardconstexprnoexcept |
|
inlinenodiscardnoexcept |
|
inlinenodiscardnoexcept |
|
inlinenodiscardnoexcept |
|
inlinenodiscardnoexcept |
|
inlinenodiscardnoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenodiscardnoexcept |
|
inlinenodiscardnoexcept |
Adopt a direct fractional-sample target.
Rejected updates preserve the complete current transition.
|
inlinenodiscardnoexcept |
Convert and adopt a musical target transactionally.
Conversion or capacity failure leaves the current target and transition untouched.
|
inlinestaticnodiscardconstexprnoexcept |
|
inlinenodiscardnoexcept |
|
inlinenodiscardnoexcept |
|
staticconstexpr |