33

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?

1

5 Answers 5

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.

3
  • 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 May 28, 2015 at 9: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, 2017 at 2:25
  • 1
    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, 2021 at 17:47
13

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.

3
  • If you're use EasyEffects, don't forget to install and start pipewire instead of pulseaudio: pipewire-debian.github.io/pipewire-debian Sep 9, 2021 at 20:01
  • @Pablo Bianchi, please update installation instruction for Easy Effects.
    – kujaw
    Dec 13, 2021 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). Jun 16 at 7: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
1
  • In my analysis of <github.com/swh/ladspa/blob/master/sc4_1882.xml#L116> it seems like there are some ranges applied to the parameters. It looks like your example is a bit out of range on some of the parameters. Since the documentation - from the author Steve Harris - is rather thin and lacking examples, I could be completely wrong.
    – Ale
    Aug 1, 2017 at 22:40
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
1
  • 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 Jun 22, 2018 at 5:24
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

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .