Uses the previously merged denoising crate (and fixes a bug in it that snug in during refactoring) to add denoising to the microphone input. Adds automatic volume control for microphone and output. Prepares for migrating to 16kHz SR mono: The experimental audio path now picks the samplerate and channel count depending on a setting. It can handle incoming streams with both the current (future legacy) and new samplerate & channel count. These are url-encoded into the livekit track name Release Notes: - N/A
Real time streaming audio denoising using a Dual-Signal Transformation LSTM Network for Real-Time Noise Suppression.
Trivial to build as it uses the native rust Candle crate for inference. Easy to integrate into any Rodio pipeline.
# use rodio::{nz, source::UniformSourceIterator, wav_to_file};
let file = std::fs::File::open("clips_airconditioning.wav")?;
let decoder = rodio::Decoder::try_from(file)?;
let resampled = UniformSourceIterator::new(decoder, nz!(1), nz!(16_000));
let mut denoised = denoise::Denoiser::try_new(resampled)?;
wav_to_file(&mut denoised, "denoised.wav")?;
Result::Ok<(), Box<dyn std::error::Error>>
Acknowledgements & License
The trained models in this repo are optimized versions of the models in the breizhn/DTLN. These are licensed under MIT.
The FFT code was adapted from Datadog's dtln-rs Repo also licensed under MIT.