werman/noise-suppression-for-voice: RNNoise as a VST2, VST3, LV2, LADSPA, AU and AUv3 plugin
Noise suppression plugin based on Xiph's RNNoise
At a glance
- What is it?
- A real-time noise suppression plugin built on Xiph's RNNoise, shipped in six plugin formats and locked to 48 kHz, 16-bit input. It is the right tool when you already have a host that can load a plugin, and the wrong one when you want an app.
- Who is it for?
- Adopt it if you already run a plugin host (Equalizer APO on Windows, PipeWire or PulseAudio on Linux, an AU or VST host on macOS) and your capture chain is genuinely 48 kHz. Do not adopt it if you want a standalone application, if you cannot force your microphone to 48000 Hz, or if your source is a bad microphone whose quality you hope to repair.
- Can I use it commercially?
- Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Yes. The repository last received commits 124 days ago.
- What is it written in?
- Mainly C++, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 27, 2026, and from our analysis. They are not legal advice.
Editorial analysis
The problem it solves, and the 48 kHz price of admission
The project is a plugin, not an application. It exists so that an existing audio host can insert RNNoise into a live capture chain: a VST2 or VST3 host on Windows, a LADSPA or LV2 host under PipeWire or PulseAudio on Linux, an AU or AUv3 host on macOS and iOS. If you do not already have such a host, this repository gives you a library and a GUI, not a program to launch.
The constraint that shapes everything else is stated in the README in capitals: the plugin works with one or more channels, 16 bit, 48000 Hz audio input, and the README warns not to use any other sample rate. That is not a soft preference. RNNoise is a recurrent network trained on 48 kHz frames, and the plugin does not resample for you. On PipeWire the README's own configuration pins both capture and playback to audio.rate = 48000. If your microphone only offers 44100 Hz and your host cannot force it, this plugin is the wrong tool regardless of how well it denoises.
The intended audience is narrow and technical: people who route their own audio, who are comfortable editing a PipeWire configuration file or a PulseAudio module line, and who want denoising without a full effects suite. The README also lists what the plugin is meant to suppress, drawn from the original paper: computer fans, office, crowd, airplane, car, train, construction.
What RNNoise does to a frame, and what the VAD knobs change
The mechanism is inherited from Xiph's RNNoise: audio is processed in frames, and a voice activity detector produces a probability that the current frame contains speech. The plugin exposes that probability as a threshold rather than hiding it. `VAD Threshold (%)` silences any frame whose voice probability falls below the setting, and the README suggests 85% to 95% works in most cases. Below that threshold the frame is suppressed; above it, audio passes.
The two grace period parameters exist because a frame-level decision cuts words. `VAD Grace Period (ms)` keeps the output unsilenced for a while after the last detected voice, which the README says helps when ends of words or sentences are being cut off. `Retroactive VAD Grace Period (ms)` does the same for the start of a word, and the README flags it with a warning: it introduces latency. That is the honest trade-off in the design. You can buy smoother word boundaries with delay, or you can keep latency low and accept clipped consonants.
The README is candid about the failure mode that matters most. Mild background noise is always suppressed, and loud sounds such as a mechanical keyboard are suppressed while there is no voice, but they are only reduced in volume when voice is present. The detector is not a gate that closes on everything non-speech; it is a speech-preserving filter, and it will let some noise through wherever it thinks you are talking.
Installing it and getting a first denoised source on PipeWire
The README does not give a build recipe; it points to the releases page for binaries and to a third-party Medium guide for the Windows setup. On Windows the documented path is Equalizer APO: open Recording devices, then Recording, then Properties of the target microphone, then Advanced, and check or change the sample rate there. In Equalizer APO, select Plugins, then VST Plugin, and specify the plugin dll.
On Linux with PipeWire 0.3.45 or newer, the README uses split-file configuration. Create the config directory, then a file for the plugin:
mkdir -p ~/.config/pipewire/pipewire.conf.d/Create `~/.config/pipewire/pipewire.conf.d/99-input-denoising.conf` and paste the README's filter-chain block, replacing the library path with the real one:
context.modules = [
{ name = libpipewire-module-filter-chain
args = {
node.description = "Noise Canceling source"
media.name = "Noise Canceling source"
filter.graph = {
nodes = [
{
type = ladspa
name = rnnoise
plugin = /path/to/librnnoise_ladspa.so
label = noise_suppressor_mono
control = {
"VAD Threshold (%)" = 50.0
"VAD Grace Period (ms)" = 200
"Retroactive VAD Grace (ms)" = 0
}
}
]
}
capture.props = {
node.name = "capture.rnnoise_source"
node.passive = true
audio.rate = 48000
}
playback.props = {
node.name = "rnnoise_source"
media.class = Audio/Source
audio.rate = 48000
}
}
}
]Restart PipeWire with `systemctl restart --user pipewire.service`, then select `Noise Canceling source` as your input device. The README recommends `noise_suppressor_mono` even if your microphone claims to be stereo, noting that stereo consumes 2x resources.
For PulseAudio the README gives a three-module recipe, and notes it must run every time PulseAudio starts unless you automate it through `~/.config/pulse/default.pa`:
pacmd load-module module-null-sink sink_name=mic_denoised_out rate=48000
pacmd load-module module-ladspa-sink sink_name=mic_raw_in sink_master=mic_denoised_out label=noise_suppressor_mono plugin=/path/to/librnnoise_ladspa.so control=50,20,0,0,0
pacmd load-module module-loopback source=<your_mic_name> sink=mic_raw_in channels=1 source_dont_move=true sink_dont_move=trueFind your microphone name first with `pactl list sources short`. The README's own TLDR for PulseAudio users is blunt: use PipeWire instead.
Where it makes things worse, and where the documentation stops
The clearest limitation is stated by the author, not a reviewer: the plugin could not improve voice quality with a bad microphone, and it could even make things worse by misclassifying the voice as noise, reducing already poor voice quality. If your problem is a cheap headset rather than a noisy room, this plugin is not the fix, and it may be a regression.
The second limitation is the sample rate. There is no automatic conversion, and the README repeats the warning with emphasis. A host that silently resamples, or a capture device stuck at 44100 Hz, will produce either no useful output or artifacts, and the plugin will not tell you it is being fed the wrong rate.
The third is documentation coverage. The README's PipeWire troubleshooting section is a single line reading TODO, how to change sample rate for mic, so the most common setup problem has no answer in the project's own docs. The Windows instructions defer to an external Medium article for detail. The PulseAudio path is collapsed behind a details tag with a recommendation to avoid it. None of this is hidden, but it means the project assumes you can read a PipeWire or PulseAudio configuration and debug it yourself.
Finally, the README describes a minimalistic GUI with all parameters and diagnostic stats, but it does not document rollback, uninstall steps, or how to remove the PipeWire filter chain once installed. Removal is left to the reader.
EasyEffects and NoiseTorch: same library, different amount of control
The README itself names two alternatives, and both also use RNNoise, so the choice is not about denoising quality but about how much of the pipeline you want to own. EasyEffects is described as a general audio effects GUI for PipeWire, easy to set up and use, with fewer settings for denoising, available on Flathub. NoiseTorch is described as easy to set up, working with PulseAudio and PipeWire, also with fewer settings.
The difference in approach is the number of exposed parameters. This plugin hands you `VAD Threshold (%)`, `VAD Grace Period (ms)` and `Retroactive VAD Grace Period (ms)`, plus the choice between mono and stereo LADSPA labels, and expects you to place it in a filter graph you maintain. EasyEffects and NoiseTorch wrap the same denoising behind an application and a preset, which is the better fit if you do not want to edit `99-input-denoising.conf` or reason about grace periods. The plugin is the better fit if you are already writing PipeWire configuration and want the threshold and latency to be your decision rather than a default.
Maintenance, licensing and the cost of upgrading
The repository is not archived, and the last push was on 2026-05-29, which is the same day as the v1.21 release. The release history is sparse: v1.03 in 2022, v1.10 in 2024, and v1.21 in 2026. That cadence tells you what to expect. This is a stable, low-churn project rather than one that ships fixes monthly, and the version jump from v1.10 to v1.21 suggests the numbering is not strictly semantic.
Upgrade cost is low in principle and awkward in practice. There is no package manager path documented in the README, so an upgrade means replacing the plugin binary or library file at the path your host or filter chain references. On PipeWire that path is written into `99-input-denoising.conf` as the `plugin =` value, and on PulseAudio it is the `plugin=` argument to `module-ladspa-sink`. If you replace the file in place, nothing else changes; if the filename changes between releases, you edit configuration in two places.
The licence is GPL-3.0, and the README carries the GPLv3 badge linking to the GNU licence text. The project also builds on Xiph's RNNoise as a submodule, visible in the repository's `external/` directory and `.gitmodules`. If you intend to redistribute the plugin inside a product rather than load it in a host, the GPL-3.0 terms apply to that distribution; that is a question for your own legal review, not something this article can settle.
Editorial conclusion
Adopt it if you already run a plugin host (Equalizer APO on Windows, PipeWire or PulseAudio on Linux, an AU or VST host on macOS) and your capture chain is genuinely 48 kHz. Do not adopt it if you want a standalone application, if you cannot force your microphone to 48000 Hz, or if your source is a bad microphone whose quality you hope to repair. Verify two things before wiring it into your daily calls: that your capture device reports 48000 Hz, and that the LADSPA label you reference (noise_suppressor_mono or noise_suppressor_stereo) matches the library you built or downloaded.
Frequently asked questions
How do I install noise suppression for voice?
The README points to the releases page for the VST2, VST3, LV2, LADSPA, AU and AUv3 builds rather than giving build steps. On Windows you load the dll through Equalizer APO's Plugins, then VST Plugin menu. On Linux you reference the LADSPA library from a PipeWire filter-chain config file or a PulseAudio module-ladspa-sink line.
What sample rate does the noise suppression for voice plugin require?
The README states the plugin works with 16 bit, 48000 Hz audio input and warns in capitals not to use any other sample rate. The PipeWire example pins both capture and playback to audio.rate = 48000, and the PulseAudio null sink is created with rate=48000.
Can noise suppression for voice work as a standalone application?
No. It ships as VST2, VST3, LV2, LADSPA, AU and AUv3 plugins, so it needs a host such as Equalizer APO on Windows, PipeWire or PulseAudio on Linux, or an AU host on macOS. If you want an application, the README names EasyEffects and NoiseTorch, both of which also use RNNoise.
Does noise suppression for voice improve a bad microphone?
The README says it could not improve voice quality with a bad microphone, and that it could make things worse by misclassifying voice as noise and reducing already poor quality. It targets background noise such as fans, office, crowd, airplane, car, train and construction, not microphone quality.
What does the VAD Threshold setting in noise suppression for voice do?
If the probability of a sound being a voice is lower than the threshold, it is silenced. The README suggests a threshold between 85% and 95% works in most cases, and notes that without the VAD some loud noises may still be slightly audible when there is no voice.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/werman-noise-suppression-for-voice)