use crate::Error;
pub(crate) mod cubic;
pub(crate) mod rubato;
#[derive(Copy, Clone)]
pub struct ResamplingSpecs {
pub input_rate: u32,
pub output_rate: u32,
pub channel_count: usize,
}
impl ResamplingSpecs {
pub fn new(input_rate: u32, output_rate: u32, channel_count: usize) -> Self {
debug_assert!(output_rate > 0 && input_rate > 0);
Self {
input_rate,
output_rate,
channel_count,
}
}
pub fn input_ratio(&self) -> f64 {
self.input_rate as f64 / self.output_rate as f64
}
pub fn output_ratio(&self) -> f64 {
self.output_rate as f64 / self.input_rate as f64
}
}
pub trait AudioResampler: Send + Sync {
fn required_input_buffer_size(&self) -> Option<usize>;
fn max_input_buffer_size(&self) -> Option<usize>;
fn process(&mut self, input: &[f32], output: &mut [f32]) -> Result<(usize, usize), Error>;
fn update(&mut self, input_rate: u32, output_rate: u32) -> Result<(), Error>;
fn reset(&mut self);
}