use crate::basic_reverb::BasicReverb;
pub struct StereoBasicReverb {
basic_reverb: BasicReverb,
}
impl StereoBasicReverb {
pub fn new(
room_size_ms: f64,
rt60: f64,
dry: f64,
wet: f64,
channels: usize,
sample_rate: u32,
) -> Self {
Self {
basic_reverb: BasicReverb::new(room_size_ms, rt60, dry, wet, channels, sample_rate),
}
}
pub fn process_sample(&mut self, sample: (f64, f64)) -> (f64, f64) {
let channels = self.basic_reverb.channels;
let mut input = vec![0.; channels];
for i in 0..channels / 2 {
input[2 * i] = sample.0;
input[2 * i + 1] = sample.1;
}
let output = self.basic_reverb.process(input);
let mut sum = (0., 0.);
for i in 0..channels / 2 {
sum.0 = output[2 * i];
sum.1 = output[2 * i + 1];
}
(sum.0 / (channels / 2) as f64, sum.1 / (channels / 2) as f64)
}
}