18#ifndef SBL_DSP_PRIMITIVES_ALLPASS_FILTER_HPP_
19#define SBL_DSP_PRIMITIVES_ALLPASS_FILTER_HPP_
35 : buffer_(buffer), delay_(
delay), write_pos_(0) {}
61 float delayed = buffer_[write_pos_];
63 float output = -feedback_ * x + delayed;
64 float to_buffer = x + feedback_ * output;
66 buffer_[write_pos_] = to_buffer;
69 if (write_pos_ >= delay_) {
88 for (uint32_t i = 0; i < delay_; ++i) buffer_[i] = 0.0f;
94 uint32_t
delay()
const {
return delay_; }
100 float* buffer_ =
nullptr;
102 uint32_t write_pos_ = 0;
103 float feedback_ = 0.5f;
AllpassFilter()=default
Default constructor for array initialization (must call init() before use)
uint32_t write_pos() const
Current write position (for external tap reads)
void set_feedback(float g)
Set feedback coefficient.
void init(float *buffer, uint32_t delay)
Initialize after default construction.
uint32_t delay() const
Delay length in samples.
float process(float x)
Process a single sample.
void reset()
Zero the buffer and reset write position.
float feedback() const
Current feedback coefficient.
AllpassFilter(float *buffer, uint32_t delay)
Construct with caller-provided buffer.
Stateful, single-concern building blocks.