35 constexpr void setBuffer(std::span<int32_t> buffer) { buffer_ = buffer; }
37 constexpr void mute() { std::fill(buffer_.begin(), buffer_.end(), 0); }
39 constexpr void setFeedback(
float val) { feedback_ = val * std::numeric_limits<int32_t>::max(); }
41 [[nodiscard]]
constexpr float getFeedback()
const {
return (
float)feedback_ / std::numeric_limits<int32_t>::max(); }
43 [[gnu::always_inline]]
constexpr int32_t process(int32_t input) {
44 int32_t bufout = buffer_[bufidx_];
45 int32_t output = -input + bufout;
47 buffer_[bufidx_] = input + (bufout >> 1);
50 if (++bufidx_ >= buffer_.size()) {
59 std::span<int32_t> buffer_;