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 |
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.
|
default |
|
delete |
|
inlinenodiscardnoexcept |
|
inlinenodiscardnoexcept |
|
inlinenodiscardnoexcept |
|
inlinenodiscardnoexcept |
|
inlinenodiscardnoexcept |
|
inlinenodiscardnoexcept |
|
inlinestaticnodiscardconstexprnoexcept |
|
inlinenodiscardnoexcept |
|
delete |
|
inlinenodiscard |
|
inlinenodiscardnoexcept |
|
inlinenodiscardnoexcept |
|
inlinenoexcept |
|
inlinenodiscardnoexcept |
|
inlinenodiscardnoexcept |
|
inlinenodiscardnoexcept |
|
inlinenodiscardnoexcept |
|
inlinenodiscardnoexcept |
|
inlinenodiscardnoexcept |
|
inlinenodiscardnoexcept |
|
inlinenodiscardnoexcept |
|
inlinenodiscardnoexcept |
|
inlinenodiscardnoexcept |
|
staticconstexpr |
|
staticconstexpr |