Is there a way of leveling/compressing the sound system-wide?

As a Laptop user, I'm sure that a lot of people, even the ones using Netbooks would have already gone through this problem. Especially when listening to podcasts, and using it as an example, the sound might have loud moments and quiet moments, one person speaking loud and the other speaking very quiet in the same episode. Thereby, I always wanted the sound to be compressed system-wide, and I just noted the other day, that in Windows, some Realtek drivers already offer this function.

We have already a pulseaudio plugin for equalization system-wide, and although it still has problems like not letting us change its values and listen the change in real time, or cracking the sound while changing pulse volume, I do love it and use it. Now I'm just missing something to keep the sound around 0db (or near the volume level you're using) as a leveler plugin for pulseaudio.

Any suggestion?


Solution 1:

I had success with the example shown in this answer.

  1. Install Steve Harris's LADSPA plugins Install swh-plugins

    sudo apt install swh-plugins
    
  2. Run pacmd and then this commands:

    load-module module-ladspa-sink sink_name=compressor plugin=sc4m_1916 label=sc4m control=1,1.5,401,-30,20,5,12
    set-default-sink compressor
    

This answer explains how to load the plugin permanently.


The parameters (the control=1,1.5,401,-30,20,5,12 part above) for this compressor are described in Steve Harris' LADSPA Plugin Docs:

  1. RMS/peak: The balance between the RMS and peak envelope followers.RMS is generally better for subtle, musical compression and peak is better for heavier, fast compression and percussion.
  2. Attack time (ms): The attack time in milliseconds.
  3. Release time (ms): The release time in milliseconds.
  4. Threshold level (dB): The point at which the compressor will start to kick in.
  5. Ratio (1:n): The gain reduction ratio used when the signal level exceeds the threshold.
  6. Knee radius (dB): The distance from the threshold where the knee curve starts.
  7. Makeup gain (dB): Controls the gain of the makeup input signal in dB's.
  8. Amplitude (dB): The level of the input signal, in decibels.
  9. Gain reduction (dB): The degree of gain reduction applied to the input signal, in decibels.

Due to a limitation of PulseAudio, it is not possible to adjust them in real time.

To experiment with different parameters, I also loaded the compressor as a real-time adjustable ALSA plugin via Alsaequal Install libasound2-plugin-equal by creating the following ~/.asoundrc:

ctl.compressor {
  type equal;
  library "/usr/lib/ladspa/sc4m_1916.so";
  module "sc4m";
}

pcm.plugcompressor {
  type equal;
  slave.pcm "plug:pulse";
  library "/usr/lib/ladspa/sc4m_1916.so";
  module "sc4m";
}

pcm.compressor {
  type plug;
  slave.pcm plugcompressor;
}

A sample MP3 file can be played through the compressor using mpg321 Install mpg321,

mpg321 -a hw:compressor "04 - Love Song for Yoshimi.mp3"

while alsamixer -D compressor can be used to adjust parameters in real-time.

Solution 2:

I recommend EasyEffects (formerly known as PulseEffects). It's an application, where you have lots of tools to manipulate sound system-wide (includes compressor). Pretty easy to use.

For me this setup works best in movies: enter image description here

Installation instructions

Pulse Effects can be installed from a PPA (Ubuntu >= 18.04) or as flatpak. I highly recommend trying the flatpak first because it is self-contained and doesn't mess with your system configuration, whereas the PPA version will install a backport of Pulse Audio 12 from 18.10 on 18.04.

Flatpak

If flatpak isn't installed on your system yet, install it with the following command in a terminal:

sudo apt install flatpak

Now add the flathub repository:

flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

...and install Pulse Effects:

flatpak install flathub com.github.wwmm.pulseeffects

Alternatively, you can follow the official quick setup guide and install PulseEffects from its flathub page.

PPA

If the flatpak version doesn't work or you prefer to use the PPA, run the following commands in a terminal:

sudo add-apt-repository ppa:mikhailnov/pulseeffects -y
sudo apt install pulseeffects pulseaudio --install-recommends

After installation, reboot your system.