mod ffi;
use anr_core::{NoiseReduction, Result};
use anr_dfn3::{Denoiser, Model};
use std::path::Path;
pub struct DFN3 {
inner: Denoiser,
}
impl DFN3 {
pub const SAMPLE_RATE: u32 = Denoiser::SAMPLE_RATE;
pub const FRAME_SIZE: usize = Denoiser::FRAME_SIZE;
pub const STATE_SIZE: usize = Denoiser::STATE_SIZE;
pub fn from_file(path: impl AsRef<Path>) -> Result<Self> {
let model = Model::load_aligned(path.as_ref(), 64)?;
Ok(Self {
inner: Denoiser::spawn(move || ffi::Gpu::new(model))?,
})
}
}
impl NoiseReduction for DFN3 {
fn run(&mut self, sample_rate: u32, input: &[f32], output: &mut [f32]) -> Result<()> {
self.inner.run(sample_rate, input, output)
}
fn factor(&self) -> f32 {
self.inner.factor()
}
fn set_factor(&mut self, value: f32) {
self.inner.set_factor(value);
}
fn reset(&mut self) {
self.inner.reset();
}
}