34

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?

5 Answers5

19

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.

Pablo Bianchi
  • 15,657
ændrük
  • 76,794
  • If you get ALSA lib dlmisc.c:252:(snd1_dlobj_cache_get) Cannot open shared library /usr/lib/x86_64-linux-gnu/alsa-lib/libasound_module_ctl_equal.so on Ubuntu 14.10 try apt-get install libasound2-plugin-equal – Stéphane Gourichon May 28 '15 at 09:17
  • I use Ubuntu-Studio 16.04 LTS and I installed the swh-plugins package, but... the lines: "pacmd load-module module-ladspa-sink sink_name=compressor plugin=sc4m_1916 label=sc4m control=1,1.5,401,-30,5,9,3,0,0 pacmd set-default-sink compressor" don't work. It isn't a parameters issue because the system gives me the error: "Module not found". So... something is missed from the plugin package, but... What??? – Juan Sep 20 '17 at 02:25
  • 2
    You list 7 numbers for 9 arguments, which arguments did you actually set in 1,1.5,401,-30,20,5,12? – remram Aug 19 '21 at 17:47
14

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.

Pablo Bianchi
  • 15,657
kujaw
  • 460
  • 5
  • 15
  • If you're use EasyEffects, don't forget to install and start pipewire instead of pulseaudio: https://pipewire-debian.github.io/pipewire-debian/ – Melroy van den Berg Sep 09 '21 at 20:01
  • @Pablo Bianchi, please update installation instruction for Easy Effects. – kujaw Dec 13 '21 at 16:06
  • Note that EasyEffects requires PipeWire instead of PulseAudio on the operating system level. As such, EasyEffects requires Ubuntu 22.04 LTS or newer. PulseEffects is a slightly inferior replacement for systems running PulseAudio (PulseEffects has much higher latency and less adjustability in effects). – Mikko Rantalainen Jun 16 '23 at 07:09
3

These have been extremely helpful. Thank you for the inspiration. Although it is imperfect at the moment, I have a bit to contribute back. I looked in The Steve Harris Documentation to find that there are several flavors of the compressor, and I chose to use the stereo one. It did complicate using Pulse Audio Volume Control to place the compressor on multiple applications like Chrome and VLC, but I like the result. My motivation for using a compressor is to place a very strict lower and upper limit on volume. In order to not wake anyone in the house late at night, I didn't want to be constantly turning up the volume to hear the characters speaking in media, only to rush to turn it back down whenever superhero action happens or a commercial comes on. I followed the inspiration here and adjusted the values in realtime. Then I took my desired values and put them back into the sample code. In sum, the sample code I am contributing shamelessly borrows from the above example, but features the stereo compressor with a pretty strict upper and lower volume limit. Lastly, I put it into the form of a script. I hope this is useful to the community.

#!/bin/sh
# ComperssorScript.sh
# Script to start PulseAudio Compressor with desired settings
# Original: 2016 September 17

pacmd load-module module-ladspa-sink sink_name=compressor plugin=sc4_1882 label=sc4 control=9,5,63,-6,15,3,49 pacmd set-default-sink compressor

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

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.

9, Attack time (ms): The attack time in milliseconds.

5, Release time (ms): The release time in milliseconds.

63, Threshold level (dB): The point at which the compressor will start to kick in.

6, Ratio (1:n): The gain reduction ratio used when the signal level exceeds the threshold.

-15, Knee radius (dB): The distance from the threshold where the knee curve starts.

3, Makeup gain (dB): Controls the gain of the makeup input signal in dB's.

49, Amplitude (dB): The level of the input signal, in decibels.

no value was placed here

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.

no value was placed here

ShoNuff
  • 31
1

EasyEffects (which does require Pipewire however), which is a newer version of PulseEffects.

I think it's a great software product!

enter image description here

Effects available:

  • Auto gain
  • Bass enhancer
  • Bass loudness
  • Compressor
  • Convolver
  • Crossfeed
  • Crystalizer
  • De-esser
  • Echo Canceller
  • Equalizer
  • Exciter
  • Expander
  • Filter (low-pass, high-pass, band-pass and band-reject modes)
  • Gate
  • Limiter
  • Loudness
  • Maximizer
  • Multiband compressor
  • Multiband gate
  • Noise reduction
  • Pitch
  • Reverberation
  • Stereo tools
1

Here is the stereo plugin with better control settings (Much less clipping) following ændrük's answer that uses the mono plugin example.

load-module module-ladspa-sink sink_name=compressor plugin=sc4_1882 label=sc4 control=1,1.5,300,-20,3,1,10
Zanna
  • 70,465
  • your extample still do clip aon my notebook setup. gotbletu on google+ once recommended using this settings, and they worked best for me so far. load-module module-ladspa-sink sink_name=compressor plugin=sc4_1882 label=sc4 control=1,1.5,401,-30,20,5,12 – Axel Werner Jun 22 '18 at 05:24