denoising actually works on desktop!
This commit is contained in:
+31
-14
@@ -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,30 +90,45 @@ 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();
|
||||
output.extend(std::iter::repeat_n(0f32, audio.len()));
|
||||
finished = true;
|
||||
let output = &mut output[start..];
|
||||
df.process(
|
||||
slice_as_arrayview(audio, &[audio.len()])
|
||||
.into_shape((1, audio.len()))
|
||||
.unwrap(),
|
||||
mut_slice_as_arrayviewmut(output, &[output.len()])
|
||||
.into_shape((1, output.len()))
|
||||
.unwrap(),
|
||||
);
|
||||
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()));
|
||||
let output = &mut output[j..];
|
||||
|
||||
df.process(
|
||||
slice_as_arrayview(audio, &[audio.len()])
|
||||
.into_shape((1, audio.len()))
|
||||
.unwrap(),
|
||||
mut_slice_as_arrayviewmut(output, &[output.len()])
|
||||
.into_shape((1, output.len()))
|
||||
.unwrap(),
|
||||
);
|
||||
}
|
||||
self.buffer.splice(..i, []);
|
||||
});
|
||||
}
|
||||
if !finished {
|
||||
|
||||
if include_raw {
|
||||
output.extend_from_slice(audio);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user