Skip to content

Instantly share code, notes, and snippets.

@asapdotid
Last active October 22, 2025 08:29
Show Gist options
  • Select an option

  • Save asapdotid/1080c0047efcf08e5277e463701f64d7 to your computer and use it in GitHub Desktop.

Select an option

Save asapdotid/1080c0047efcf08e5277e463701f64d7 to your computer and use it in GitHub Desktop.
Pipewire Input Denoising

Setup Pipewire input denoising

Prerequisites:

- PipeWire
- Arch/Manjaro Linux or Fedora Linux

Install rnnoise first

Arch Linux:

sudo pacman -S rnnoise

Fedora Linux:

sudo dnf install rnnoise
  1. Plugin Installation

Arch Linux:

yay -S noise-suppression-for-voice

Fedora Linux:

sudo dnf copr enable ycollet/audinux 
sudo dnf install ladspa-noise-suppression-for-voice
  1. Setup Pipewire config:

Location: ~/.config/pipewire/pipewire.conf.d/

If not found, you can create first:

mkdir -p ~/.config/pipewire/pipewire.conf.d

Then create file 99-input-denoising.conf

Arch Linux:

# Noise canceling source
context.modules = [
    {   name = libpipewire-module-filter-chain
        args = {
            node.name =  "rnnoise_source"
            node.description =  "Noise Canceling source"
            media.name =  "Noise Canceling source"
            filter.graph = {
                nodes = [
                    {
                        type = ladspa
                        name = rnnoise
                        plugin = /usr/lib/ladspa/librnnoise_ladspa.so
                        label = noise_suppressor_stereo
                        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
            }
        }
    }
]

Fedora Linux:

# Noise canceling source
context.modules = [
    {   name = libpipewire-module-filter-chain
        args = {
            node.name =  "rnnoise_source"
            node.description =  "Noise Canceling source"
            media.name =  "Noise Canceling source"
            filter.graph = {
                nodes = [
                    {
                        type = ladspa
                        name = rnnoise
                        plugin = /usr/lib64/ladspa/librnnoise_ladspa.so
                        label = noise_suppressor_stereo
                        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
            }
        }
    }
]

Reload and Verify Pipewire Config

Reload:

systemctl --user restart pipewire.service

Verify:

systemctl --user status pipewire.service

Thanks

# Noise canceling source
context.modules = [
{ name = libpipewire-module-filter-chain
args = {
node.name = "rnnoise_source"
node.description = "Noise Canceling source"
media.name = "Noise Canceling source"
filter.graph = {
nodes = [
{
type = ladspa
name = rnnoise
plugin = /usr/lib/ladspa/librnnoise_ladspa.so
label = noise_suppressor_stereo
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
}
}
}
]
# Noise canceling source
context.modules = [
{ name = libpipewire-module-filter-chain
args = {
node.name = "rnnoise_source"
node.description = "Noise Canceling source"
media.name = "Noise Canceling source"
filter.graph = {
nodes = [
{
type = ladspa
name = rnnoise
plugin = /usr/lib64/ladspa/librnnoise_ladspa.so
label = noise_suppressor_stereo
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
}
}
}
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment