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 |
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.
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinestaticconstexprnoexcept |
|
inlinenoexcept |
|
inlinenodiscard |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
Zero is independent same-channel feedback; one is pure cross-channel feedback.
Intermediate values form a convex stereo feedback matrix.
|
inlinenoexcept |
|
inlinenodiscardnoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |