Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save jtrv/47542c8be6345951802eebcf9dc7da31 to your computer and use it in GitHub Desktop.

Select an option

Save jtrv/47542c8be6345951802eebcf9dc7da31 to your computer and use it in GitHub Desktop.

EasyEffects Microphone Preset: Noise Reduction + Masculine Voice + Broadcast Sound

This is a custom input chain for easyeffects for noise reduction and a "broadcast" sound optimized for masculine voices with my mic, placement, acoustics, etc. I started with @MateusRodCosta input chain (now deprecated) based on this article from fedora magazine. Soon after I prompted LLM's to produce settings for NPR-like sound. To my surprise it worked quite well in subjective testing, that is what we have here. I also added the speech processor effect, and changed the order of the chain.

If this config breaks, check my current config file and comment if I need to update the gist.

If you know of ways to improve this configuration, please feel free to comment and make a suggestion.

NOTE: Some microphone's output mono which EasyEffects may interpret as left-only stereo, you can use Stereo Tools to fix this. Thank you to @Saiv46 for pointing this out

Overview

The config follows a logical "Broadcast" workflow: Clean -> Shape -> Control -> Protect.

1. RNNoise & DeepFilterNet (Noise Cleaning)

We are currently running two AI noise reduction plugins back-to-back at the start of our chain. We pass the audio through RNNoise first, and then through DeepFilterNet. This provides aggressive noise isolation, ensuring the background is dead silent.

2. Gate (Soft Expander)

Instead of cutting the audio to total silence, we have set a Reduction of -12.0 dB and a slow Release of 250ms. This acts as a "soft gate." It pushes the background noise down gently between sentences. This feels much more natural to the listener than the audio constantly cutting out to "digital void" silence.

3. Equalizer (Tonal Shaping)

This sculpts the actual tonality of our masculine voice profile.

Band 0 (High Pass @ 80Hz): We are cutting the ultra-low rumble (like desk bumps) that doesn't contain useful voice information.

Band 1 (Cut @ 220Hz): We are cutting -2dB here. This removes the "mud" or "boxiness" common in male voices in small rooms, making the voice sound clearer without losing body.

Band 3 (Boost @ 3500Hz): We are adding +2dB here for "intelligibility." This helps our voice cut through background music, game sounds, etc so our audience understands every word.

Band 4 (High Shelf @ 10kHz): We are adding +2dB of "Air" which gives us the crisp, expensive, "studio condenser mic" sound.

4. Compressor (Dynamic Control)

This gives us a consistent "Radio DJ" presence.

Attack (15ms): We wait 15ms before the compressor clamps down. This lets the initial "punch" of our consonants (T, K, P) pass through, keeping our speech articulate.

Ratio (3:1): For every 3dB we go over the limit, only 1dB gets through. This smooths out moments when we get excited and loud.

Makeup Gain (+3dB): Since we are squashing the peaks, we use this knob to turn our overall volume back up, making the voice sound louder and fuller.

5. De-Esser (Sibilance Control)

Because we boosted the treble in our Equalizer, our sharp "S", "T", and "Sh" sounds might get harsh. We target the 4kHz to 8kHz range to tame them and prevent ear fatigue. (The range specifically targets masculine sibilance which is lower than feminine sibilance)

6. Limiter (Safety Ceiling)

This safety net stops our audio from exceeding -1.5dB. Even if we scream into the mic, the Limiter prevents digital distortion (clipping). It ensures our stream audio is loud and competitive, but never "broken."

{
"input": {
"blocklist": [],
"compressor#0": {
"attack": 15.0,
"boost-amount": 0.0,
"boost-threshold": -72.0,
"bypass": false,
"dry": -80.01,
"hpf-frequency": 10.0,
"hpf-mode": "Off",
"input-gain": 0.0,
"input-to-link": 0.0,
"input-to-sidechain": 0.0,
"knee": -6.0,
"link-to-input": 0.0,
"link-to-sidechain": 0.0,
"lpf-frequency": 20000.0,
"lpf-mode": "Off",
"makeup": 3.0,
"mode": "Downward",
"output-gain": 0.0,
"ratio": 3.0,
"release": 200.0,
"release-threshold": -40.0,
"sidechain": {
"lookahead": 0.0,
"mode": "RMS",
"preamp": 0.0,
"reactivity": 10.0,
"source": "Middle",
"stereo-split-source": "Left/Right",
"type": "Feed-forward"
},
"sidechain-to-input": 0.0,
"sidechain-to-link": 0.0,
"stereo-split": false,
"threshold": -18.0,
"wet": 0.0
},
"deepfilternet#0": {
"attenuation-limit": 100.0,
"bypass": false,
"input-gain": 0.0,
"max-df-processing-threshold": 20.0,
"max-erb-processing-threshold": 30.0,
"min-processing-buffer": 0,
"min-processing-threshold": 5.0,
"output-gain": 0.0,
"post-filter-beta": 0.019999999552965164
},
"deesser#0": {
"bypass": false,
"detection": "RMS",
"f1-freq": 4000.0,
"f1-level": -6.0,
"f2-freq": 8000.0,
"f2-level": -6.0,
"f2-q": 1.5,
"input-gain": 0.0,
"laxity": 15,
"makeup": 0.0,
"mode": "Split",
"output-gain": 0.0,
"ratio": 3.0,
"sc-listen": false,
"threshold": -22.0
},
"equalizer#0": {
"balance": 0.1,
"bypass": false,
"input-gain": 0.0,
"left": {
"band0": {
"frequency": 80.0,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 0.7,
"slope": "x2",
"solo": false,
"type": "Hi-pass",
"width": 4.0
},
"band1": {
"frequency": 220.0,
"gain": -2.0,
"mode": "RLC (MT)",
"mute": false,
"q": 0.7,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band2": {
"frequency": 350.0,
"gain": -2.0,
"mode": "BWC (MT)",
"mute": false,
"q": 1.2,
"slope": "x2",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band3": {
"frequency": 3500.0,
"gain": 2.0,
"mode": "BWC (BT)",
"mute": false,
"q": 0.9,
"slope": "x2",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band4": {
"frequency": 10000.0,
"gain": 2.0,
"mode": "LRX (MT)",
"mute": false,
"q": 0.7,
"slope": "x1",
"solo": false,
"type": "Hi-shelf",
"width": 4.0
}
},
"mode": "IIR",
"num-bands": 5,
"output-gain": 0.0,
"pitch-left": 0.0,
"pitch-right": 0.0,
"right": {
"band0": {
"frequency": 80.0,
"gain": 0.0,
"mode": "RLC (BT)",
"mute": false,
"q": 0.7,
"slope": "x2",
"solo": false,
"type": "Hi-pass",
"width": 4.0
},
"band1": {
"frequency": 220.0,
"gain": -2.0,
"mode": "RLC (MT)",
"mute": false,
"q": 0.7,
"slope": "x1",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band2": {
"frequency": 350.0,
"gain": -2.0,
"mode": "BWC (MT)",
"mute": false,
"q": 1.2,
"slope": "x2",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band3": {
"frequency": 3500.0,
"gain": 2.0,
"mode": "BWC (BT)",
"mute": false,
"q": 0.9,
"slope": "x2",
"solo": false,
"type": "Bell",
"width": 4.0
},
"band4": {
"frequency": 10000.0,
"gain": 2.0,
"mode": "LRX (MT)",
"mute": false,
"q": 0.7,
"slope": "x1",
"solo": false,
"type": "Hi-shelf",
"width": 4.0
}
},
"split-channels": false
},
"gate#0": {
"attack": 5.0,
"bypass": false,
"curve-threshold": -50.0,
"curve-zone": -2.0,
"dry": -80.01,
"hpf-frequency": 10.0,
"hpf-mode": "Off",
"hysteresis": true,
"hysteresis-threshold": -3.0,
"hysteresis-zone": -1.0,
"input-gain": 0.0,
"input-to-link": 0.0,
"input-to-sidechain": 0.0,
"link-to-input": 0.0,
"link-to-sidechain": 0.0,
"lpf-frequency": 20000.0,
"lpf-mode": "Off",
"makeup": 1.0,
"output-gain": 0.0,
"reduction": -12.0,
"release": 250.0,
"sidechain": {
"lookahead": 0.0,
"mode": "RMS",
"preamp": 0.0,
"reactivity": 10.0,
"source": "Middle",
"stereo-split-source": "Left/Right",
"type": "Internal"
},
"sidechain-to-input": 0.0,
"sidechain-to-link": 0.0,
"stereo-split": false,
"wet": -1.0
},
"limiter#0": {
"alr": false,
"alr-attack": 5.0,
"alr-knee": 0.0,
"alr-release": 50.0,
"attack": 2.0,
"bypass": false,
"dithering": "16bit",
"gain-boost": false,
"input-gain": 0.0,
"input-to-link": 0.0,
"input-to-sidechain": 0.0,
"link-to-input": 0.0,
"link-to-sidechain": 0.0,
"lookahead": 2.0,
"mode": "Herm Wide",
"output-gain": 0.0,
"oversampling": "None",
"release": 5.0,
"sidechain-preamp": 0.0,
"sidechain-to-input": 0.0,
"sidechain-to-link": 0.0,
"sidechain-type": "Internal",
"stereo-link": 100.0,
"threshold": -1.5
},
"plugins_order": [
"rnnoise#0",
"deepfilternet#0",
"gate#0",
"equalizer#0",
"compressor#0",
"deesser#0",
"limiter#0"
],
"rnnoise#0": {
"bypass": false,
"enable-vad": false,
"input-gain": 0.0,
"model-name": "\"\"",
"output-gain": 0.0,
"release": 20.0,
"use-standard-model": true,
"vad-thres": 30.0,
"wet": 0.0
}
}
}
@jtrv
Copy link
Author

jtrv commented Nov 25, 2025

@cryptomilk thanks! I noticed easyeffects cleared out my config directory on the recent update but I haven't had the time to fix things. I'll take a look soon and update this gist. I'll probably add a comment on what I'm doing as well, so folks can try to configure it themselves through the UI if/when breaking changes happen.

@Saiv46
Copy link

Saiv46 commented Nov 29, 2025

@jtrv Thank you for your config! But I've encountered a problem that fifine microphone outputs mono, and EasyEffects treat it as left-only stereo. I had to add Stereo Tools to fix that.

@StevenBR
Copy link

StevenBR commented Jan 2, 2026

I installed version 8 of easyeffects, and had to use the fifine version from your configs instead of this one, but once I got it working it worked great.

I also had to do the stereo fix as mentioned above.

@UnixTheWanderer
Copy link

UnixTheWanderer commented Jan 25, 2026

Hey, how would one make it for fem? edit: oh wait nvm this is for voice changing mybad

@Hajit-Story
Copy link

Hajit-Story commented Jan 27, 2026

Эй, как можно сделать это для женщин? редактирование: oh wait nvm это для изменения голоса mybad

For a female voice, it’s usually enough to just retune the equalizer.
Record a short clean snippet of your own voice, turn on the equalizer for the output (outgoing) sound and carefully adjust the bands until the result starts to sound good to you. Once you get a nice sound — save that preset and then apply it to the input (microphone / incoming) signal.

I recommend watching a few YouTube videos specifically about tuning an equalizer for a female voice — everyone’s voice is quite different. Sometimes your natural voice already sounds great and barely needs any correction.

One more tip: go to EasyEffects → Experimental Features and enable the built-in plugin interface.

If you’re using KDE Plasma, add this line to the launch parameters of the EasyEffects shortcut:

QT_QPA_PLATFORM=xcb

Then restart the application — after that the native plugin windows should open correctly while audio is being processed, and editing the equalizer + other filters becomes much more convenient.

Important note: in many ready-made presets the voice is very aggressively treated with de-essing / anti-sibilance, which heavily cuts the high frequencies and makes the voice sound muffled and “squeezed”. I personally find this unpleasant — keep an eye (ear) on it, and if you notice this effect, just disable that filter.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment