[Tutorial] Volume Normalization on PipeWire

Hello all,

those who like to watch a lot of videos on the internet, especially on Youtube, probably know the problem that apparently 99% of the Youtuber or creators of the videos suffer from ADHD (Attention deficit hyperactivity disorder).

Not only that mostly thumbnails show the following content in principle:

But in addition, the sound of the videos is mostly oversaturated with loud screams, or sounds, or whatever that are sometimes more or sometimes less extra overdriven.

Now I don’t really have a big problem with this, because in principle I just avoid such crap.

That also served only to describe the situation. Surely each of you knows this problem.

However, I follow some channels (via Invidious), which put contentwise high quality videos online, but technically can only rudimentary deal with computer & co (eg I follow a channel about lathes).

And if I even have enough alcohol, then I sometimes celebrate a small party and play one song after another via the Internet. :joy: :partying_face:

And exactly for that there is a solution. And that is Volume Normalization.

With that, you didnt need anymore to adjust your Volume every secound. It gets on one Level normalized.

Here I will describe different ways how to implement this on Systems wich runs Pipewire ONLY.

I will mark the ways that are still under development.


1) Via EasyEffect

Install first easyeffect:

sudo pacman -S easyeffects

Than download LoudnessEqualizer.json from https://github.com/Digitalone1/EasyEffects-Presets (thanks to Digitalone1):

wget https://raw.githubusercontent.com/Digitalone1/EasyEffects-Presets/master/LoudnessEqualizer.json

Move the LoudnessEqualizer.json to ~/.config/easyeffects/output :

mv LoudnessEqualizer.json ~/.config/easyeffects/output/LoudnessEqualizer.json

Now start EasyEffect and you should see a Window like this:

First, click on the “Hamburger Menu” and click on “Preferences” to enable autostart the easyeffect-daemon:

After this is done, check the Soundcard you want to use for normalization:

For me, the default Selection is right. So i didnt need change anything. For you it could differ.

After that, its time to Load the Profile:

Now you should have following:

Dont touch it. Now have fun with it. Now everything what the System outputs as Sound, gets normalized.

But you want to load it with every reboot, so do following:

There you need to choose your right Soundcard, the Profile, and then add that with the blue “+”.


2) Via PipeWire directly



Great, you are indeed addressing something very annoying. I found your introduction to the topic delicious.
I am now waiting for the way over pipewore only. Thank you very much for making the effort :+1:


Im waiting too :slight_smile:

But until now, i use the Method like described.

For the “PipeWire directly Method” im waiting for response:

But wwmm (the developer of easyeffect) already mentioned a method too (https://github.com/wwmm/easyeffects/issues/1319#issuecomment-1006833074):

[…] There are different ways to achieve what you want. And not necessarily you need to use EasyEffects for this. If you want a static approach similar to the one you used on Pulseaudio you can use https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Filter-Chain. But if you want to do it in EasyEffects there are two possibilities

  • Using a compressor
  • Using the Autogain plugin

The compressor will be more familiar to the approach you are currently using. The autogain has less configuration options and it will normalize the volume based on “perceived” sound level. This is done through a library based on the EBU R 128 standard for loudness estimation.

A quick Search few hours ago, i already found few Solutions (but no one described how to do it).

But like said, if i get more Information for other working Solutions, i would add them to the Tutorial.

1 Like

Thanks for sharing the whole thing. I´ll share the waiting time with you :smiley: :wink:

One of the Devs is starting to work on this Bug :+1:

1 Like

Be aware this gets more complicated to do when you have something like an audio interface that you have to manually seperate ins/outs in your pipewire config. Its doable but takes more tinkering than easy effects.

wtaymans fixed it upstream! :slight_smile:

Now we simply wait, until this goes through downstream until it arrives us :slight_smile: