shizen_components/
delay.rs1use 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}