shizen_components/
delay.rs

1use shizen_buffers::audio::{AudioProcessor, Sample};
2use std::collections::VecDeque;
3
4#[derive(Debug, Default, Clone, PartialEq, PartialOrd)]
5pub struct DelayComponent {
6    pub delay_time: f32,
7    pub feedback: f32,
8    pub wet_dry: f32,
9}
10
11impl DelayComponent {
12    pub const fn new(delay_time: f32, feedback: f32, wet_dry: f32) -> Self {
13        Self {
14            delay_time,
15            feedback,
16            wet_dry,
17        }
18    }
19}
20
21impl<const CH: usize> AudioProcessor<CH> for DelayComponent {
22    fn process_samples(&self, samples: &[Sample; CH]) -> [Sample; CH] {
23        let mut delay_buffer = VecDeque::new();
24        samples.map(|s| {
25            delay_buffer.push_back(s);
26            let delayed_sample = delay_buffer.pop_front().unwrap();
27            delayed_sample * self.wet_dry + s * (1.0 - self.wet_dry)
28        })
29    }
30}