rill-core-dsp 0.6.0-M2

Core DSP abstractions and algorithms for Rill
Documentation
use rill_core::builtin::SampleBuiltin;
use rill_core::math::Transcendental;
use rill_core::traits::algorithm::Algorithm;

use crate::filters::MoogLadder;
use crate::lang::pv_f32;

pub struct MoogBuiltin<T: Transcendental> {
    pub inner: MoogLadder<T>,
}

impl<T: Transcendental> SampleBuiltin<T> for MoogBuiltin<T> {
    fn process_sample(&mut self, inputs: &[T]) -> T {
        self.inner.process_sample(inputs[0])
    }
    fn init(&mut self, sr: f32) {
        Algorithm::init(&mut self.inner, sr);
    }
    fn reset(&mut self) {
        Algorithm::reset(&mut self.inner);
    }
    fn set_param(&mut self, index: usize, value: &rill_core::traits::ParamValue) {
        let v = pv_f32(value);
        match index {
            0 => self.inner.set_cutoff(v),
            1 => self.inner.set_resonance(v),
            _ => {}
        }
    }
}