basic_reverb/diffuser/
diffuser_half_lengths.rs1use super::diffusion_step::DiffusionStep;
2use array_init::array_init;
3
4pub(crate) struct DiffuserHalfLengths<const CHANNELS: usize, const SAMPLE_RATE: u32> {
5 steps: [DiffusionStep<CHANNELS, SAMPLE_RATE>; CHANNELS],
6}
7
8impl<const CHANNELS: usize, const SAMPLE_RATE: u32> DiffuserHalfLengths<CHANNELS, SAMPLE_RATE> {
9 pub(crate) fn new(diffusion_ms: f64) -> Self {
10 let mut diffusion_ms = diffusion_ms;
11 let steps = array_init(|_| {
12 let mut step = DiffusionStep::new();
13 diffusion_ms *= 0.5;
14 step.delay_ms_range = diffusion_ms;
15 step
16 });
17
18 Self { steps }
19 }
20
21 pub(crate) fn process(&mut self, samples: [f64; CHANNELS]) -> [f64; CHANNELS] {
22 let mut samples = samples;
23 for step in &mut self.steps {
24 samples = step.process(samples);
25 }
26 samples
27 }
28}