Files
cellula.rs/cellular/src/jitter.rs
2025-11-09 22:43:24 -05:00

41 lines
976 B
Rust

type Sample = f64;
#[derive(Clone)]
pub struct Jitter {
pub buffer: Vec<Sample>,
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
}
}