type Sample = f64; #[derive(Clone)] pub struct Jitter { pub buffer: Vec, pub read_pos: usize, pub write_pos: usize, pub size: usize, } impl Jitter { pub fn new(size: usize) -> Self { Jitter { buffer: vec![0.0; size], read_pos: 0, write_pos: 0, size, } } pub fn write(&mut self, samples: &[Sample]) { for &sample in samples { self.buffer[self.write_pos] = sample; self.write_pos = (self.write_pos + 1) % self.size; } } pub fn read(&mut self, output: &mut [Sample]) -> usize { let mut count = 0; for i in 0..output.len() { if self.read_pos != self.write_pos { output[i] = self.buffer[self.read_pos]; self.read_pos = (self.read_pos + 1) % self.size; count += 1; } else { break; } } count } }