41 lines
976 B
Rust
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
|
|
}
|
|
} |