surge-math 0.1.40-alpha.0

surge synthesizer -- dsp math used in synthesis
Documentation
ix!();

use crate::A1d;

#[derive(Debug)]
pub struct AllpassFilter<const N: usize> {
    buffer: A1d::<f64>,
    a:      f64,
    wpos:   usize,
}

impl<const N: usize> Default for AllpassFilter<N> {

    fn default() -> Self {
        Self {
            wpos: 0,
            a: 0.3,
            buffer: A1d::<f64>::zeros(N)
        }
    }
}

impl<const N: usize> AllpassFilter<N> {

    pub fn process(&mut self, x: f64) -> f64 {

        self.wpos              = (self.wpos + 1) % N;
        let y: f64             = self.buffer[self.wpos];
        self.buffer[self.wpos] = y * -self.a + x;

        y + self.buffer[self.wpos] * self.a

    }

    pub fn set_a(&mut self, a: f64) {
        self.a = a;
    }
}