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 { pub struct AudioProcessor {
denoise: bool, denoise: bool,
spawn: imp::SpawnHandle, spawn: imp::SpawnHandle,
buffer: Vec<f32>,
} }
impl AudioProcessor { impl AudioProcessor {
@@ -81,6 +82,7 @@ impl AudioProcessor {
AudioProcessor { AudioProcessor {
denoise: false, denoise: false,
spawn: imp::SpawnHandle::current(), spawn: imp::SpawnHandle::current(),
buffer: Vec::new(),
} }
} }
@@ -88,19 +90,31 @@ impl AudioProcessor {
AudioProcessor { AudioProcessor {
denoise: true, denoise: true,
spawn: imp::SpawnHandle::current(), spawn: imp::SpawnHandle::current(),
buffer: Vec::new(),
} }
} }
} }
impl AudioProcessor { impl AudioProcessor {
pub fn process(&mut self, audio: &[f32], output: &mut Vec<f32>) { pub fn process(&mut self, audio: &[f32], output: &mut Vec<f32>) {
let mut finished = false; let mut include_raw = true;
if self.denoise { if self.denoise {
with_denoising_model(&self.spawn, |df| { 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())); output.extend(std::iter::repeat_n(0f32, audio.len()));
finished = true; let output = &mut output[j..];
let output = &mut output[start..];
df.process( df.process(
slice_as_arrayview(audio, &[audio.len()]) slice_as_arrayview(audio, &[audio.len()])
.into_shape((1, audio.len())) .into_shape((1, audio.len()))
@@ -109,9 +123,12 @@ impl AudioProcessor {
.into_shape((1, output.len())) .into_shape((1, output.len()))
.unwrap(), .unwrap(),
); );
}
self.buffer.splice(..i, []);
}); });
} }
if !finished {
if include_raw {
output.extend_from_slice(audio); output.extend_from_slice(audio);
} }
} }