pub mod agc;
pub mod hushfilter;
pub mod noisefilter;
pub mod resamplers;
pub fn downmix_to_mono(samples: &[i16], channels: usize) -> Vec<i16> {
if channels <= 1 {
return samples.to_vec();
}
samples
.chunks_exact(channels)
.map(|frame| (frame.iter().map(|&s| s as i32).sum::<i32>() / channels as i32) as i16)
.collect()
}
pub trait StreamingDenoiser: Send {
fn filter(&mut self, audio: &[i16]) -> Vec<i16>;
fn flush(&mut self) -> Vec<i16>;
fn reset(&mut self);
}
impl StreamingDenoiser for noisefilter::RNNoiseFilter {
fn filter(&mut self, audio: &[i16]) -> Vec<i16> {
RNNoiseFilter::filter(self, audio)
}
fn flush(&mut self) -> Vec<i16> {
RNNoiseFilter::flush(self)
}
fn reset(&mut self) {
RNNoiseFilter::reset(self)
}
}
use noisefilter::RNNoiseFilter;