denoising actually works on desktop!

This commit is contained in:
2025-10-28 01:18:39 -06:00
parent 1ff302816e
commit 1efd32892e
+22 -5
View File
@@ -74,6 +74,7 @@ fn with_denoising_model<O>(
pub struct AudioProcessor {
denoise: bool,
spawn: imp::SpawnHandle,
buffer: Vec<f32>,
}
impl AudioProcessor {
@@ -81,6 +82,7 @@ impl AudioProcessor {
AudioProcessor {
denoise: false,
spawn: imp::SpawnHandle::current(),
buffer: Vec::new(),
}
}
@@ -88,19 +90,31 @@ impl AudioProcessor {
AudioProcessor {
denoise: true,
spawn: imp::SpawnHandle::current(),
buffer: Vec::new(),
}
}
}
impl AudioProcessor {
pub fn process(&mut self, audio: &[f32], output: &mut Vec<f32>) {
let mut finished = false;
let mut include_raw = true;
if self.denoise {
with_denoising_model(&self.spawn, |df| {
let start = output.len();
include_raw = false;
self.buffer.extend_from_slice(audio);
output.reserve(audio.len());
let hop = df.hop_size;
let mut i = 0;
while self.buffer[i..].len() >= hop {
let audio = &self.buffer[i..][..hop];
i += audio.len();
let j = output.len();
output.extend(std::iter::repeat_n(0f32, audio.len()));
finished = true;
let output = &mut output[start..];
let output = &mut output[j..];
df.process(
slice_as_arrayview(audio, &[audio.len()])
.into_shape((1, audio.len()))
@@ -109,9 +123,12 @@ impl AudioProcessor {
.into_shape((1, output.len()))
.unwrap(),
);
}
self.buffer.splice(..i, []);
});
}
if !finished {
if include_raw {
output.extend_from_slice(audio);
}
}