• WANTED: Happy members who like to discuss audio and other topics related to our interest. Desire to learn and share knowledge of science required as is 20 years of participation in forums (not all true). There are daily reviews of audio hardware and expert members to help answer your questions. Click here to have your audio equipment measured for free!

[GUIDE] How to use Equalizer APO (PEQ) presets in Linux

thyristor

Member
Joined
Mar 23, 2020
Messages
55
Likes
115
Here's a guide how to use Equalizer APO PEQ presets in Linux for headphone equalization.

Parametric equalization is applied with PipeWire low-level multimedia framework and EasyEffects application that includes a parametric equalizer that can load APO presets. EasyEffects replaces the old PulseEffects application. In this guide PipeWire is installed as an audio server to completely replace PulseAudio.

This guide is for Arch Linux but can be adapted for other distros. Arch Linux is a rolling release "bleeding edge" distro. Please note that PipeWire is a fairly new software and some other distros may have outdated version of PipeWire in their repo.

Most of the information comes from the Arch Linux wiki.

Installation

First make sure that your Arch Linux installation is up to date:

sudo pacman -Syu

Next we will install the necessary software from Arch repo:

sudo pacman -S pipewire easyeffects

When installing PipeWire you will be prompted with two options as a PipeWire session manager. PipeWire Media Session or WirePlumber. I use WirePlumber.

Then we need to install PipeWire clients that we want. Available packages are:
  • pipewire-alsa to route application using the ALSA API through PipeWire. Remove pulseaudio-alsa package if you have it installed.
  • pipewire-pulse for PulseAudio replacement. Installing this will remove pulseaudio and pulseaudio-bluetooth packages and PipeWire will work as a complete PulseAudio replacement.
  • pipewire-jack for JACK support.
In my case I want ALSA and PulseAudio support:

sudo pacman -S pipewire-alsa pipewire-pulse

And remove the pulseaudio-alsa package

sudo pacman -R pulseadio-alsa

Configuration

PipeWire doesn't need any configuration and should just work. However PipeWire resamples everything to 48 kHz by default. We want to disable resampling and use the sampling rates supported by our DACs.

The PipeWire package provides an initial set of configuration files in /usr/share/pipewire. You should not edit these files directly, as package updates will overwrite your changes. To configure PipeWire, you can copy configuration file from /usr/share/pipewire.

System wide:

sudo cp /usr/share/pipewire/pipewire.conf /etc/pipewire/

Or user location:

cp /usr/share/pipewire/pipewire.conf ~/.config/pipewire

Edit /etc/pipewire/pipewire.conf or ~/.config/pipewire/pipewire.conf. Uncomment line:

#default.clock.allowed-rates = [ 48000 ]

And edit it to include the sample rates supported by your DAC. In case of my Topping D10:

default.clock.allowed-rates = [ 44100 48000 88200 96000 176400 192000 352800 384000 ]

We are now ready to start PipeWire user services. Or you can log out or reboot as PipeWire services are set to start automatically. I recommend a full reboot if you are migrating from PulseAudio to PipeWire. If you make changes to pipewire.conf you need to restart the services.

systemctl --user restart wireplumber pipewire pipewire-pulse

If you are using MPD edit mpd.conf

audio_output { type "pipewire" name "PipeWire Sound Server" }

Usage

In PipeWire end points are called Sinks. PipeWire install will set default ALSA and PulseAudio end point to PipeWire sink.

Start EasyEffects program. Go to PipeWire tab and set your DAC as Default.

EasyEffects-04.png


Here is an example where I have two programs running that have PipeWire as end points. Firefox using PulseAudio at 48 kHz and DeadBeef player using ALSA at 192 kHz.
Nice thing about PipeWire is that you can apply effects for ALSA, PulseAudio and JACK at the same time! Or even app based if wanted.

EasyEffects-01.png


We can now go to Effects tab to add effects. Here I've added the Equalizer:

EasyEffects-02.png


You can now import Equalizer APO Presets with Load APO Preset. Presets can be found from:
The format for preset is a simple .txt file. For example I've created a text file akg_k371_amir_peq.txt
with the content:

Preamp: -4.5 dB Filter 1: ON PK Fc 2200 Hz Gain 1.5 dB Q 1.0 Filter 2: ON PK Fc 3915 Hz Gain 4.0 dB Q 4.0 Filter 3: ON PK Fc 6800 Hz Gain -3.0 dB Q 4.0

For amir's PEQ for AKG K371. Preset loaded to EasyEffects:

EasyEffects-03.png
So that's it! If you have questions I'm happy to help.
 
Last edited:

bunkbail

Addicted to Fun and Learning
Forum Donor
Joined
Feb 27, 2018
Messages
505
Likes
639
Be sure to also install Linux Studio Plugins (LSP), MDA and ZamPlugins plugins, especially the LSP one since it provides the EQ plugin otherwise EasyEffects won't work. I believe the way pacman works in Arch is that these plugins are set as optional dependencies so you have to manually install them all. I use the flatpak version of EasyEffects, these plugins are installed by default.
 
OP
thyristor

thyristor

Member
Joined
Mar 23, 2020
Messages
55
Likes
115
Be sure to also install Linux Studio Plugins (LSP), MDA and ZamPlugins plugins, especially the LSP one since it provides the EQ plugin otherwise EasyEffects won't work. I believe the way pacman works in Arch is that these plugins are set as optional dependencies so you have to manually install them all. I use the flatpak version of EasyEffects, these plugins are installed by default.

I have none of those installed. They are not needed.
 

bunkbail

Addicted to Fun and Learning
Forum Donor
Joined
Feb 27, 2018
Messages
505
Likes
639
I have none of those installed. They are not needed.
They absolutely are. You're most probably have them installed, its in the screenshots you post (bottom right). pacman -Qs | grep lsp-plugins

EDIT: I just checked on my Arch install, it appears that lsp-plugins is listed as a mandatory dependency. That's cool because it used to be optional. I use Debian, it's still listed as optional, so you still have to explicitly install it there.

pacman -Si easyeffects | grep -i depends
Depends On : calf gtk4 libebur128 libbs2b.so=0-64 librubberband.so=2-64 libsamplerate.so
=0-64 libsigc-3.0.so=0-64 libsndfile.so=1-64 liblilv-0.so=0-64 lsp-plugins pipewire-pulse rn
noise rubberband tbb zita-convolver libadwaita-1.so=0-64 libfmt.so=8-64
 
Last edited:
OP
thyristor

thyristor

Member
Joined
Mar 23, 2020
Messages
55
Likes
115
They absolutely are. You're most probably have them installed, its in the screenshots you post (bottom right). pacman -Qs | grep lsp-plugins

EDIT: I just checked on my Arch install, it appears that lsp-plugins is listed as a mandatory dependency. That's cool because it used to be optional. I use Debian, it's still listed as optional, so you still have to explicitly install it there.

Ah nice that those are pulled as a dependency now.
 

asrUser

Member
Joined
Apr 11, 2022
Messages
61
Likes
30
Kudos to @thyristor as there are almost no guides for EasyEffects. Nowadays PipeWire Media Session is obsolete, so there's only Wireplumber to choose.

Can you hear differences between IIR and FIR? I couldn't. IIR is supposed to have less latency. Also what about Peak filters? Should I choose Resonance or Bell?
 
Last edited:

bunkbail

Addicted to Fun and Learning
Forum Donor
Joined
Feb 27, 2018
Messages
505
Likes
639
Can you hear differences between IIR and FIR? I couldn't. IIR is supposed to have less latency.
Yeah me neither. I just use the default IIR.
Also what about Peak filters? Should I choose Resonance or Bell?
I believe Bell has smooth peak/recess while Resonance is sharp. Bell should be the one you want to use.

More info can be found from the LSP manual page itself.
 

Garcia

New Member
Joined
Jan 5, 2022
Messages
4
Likes
3
I recently swapped from Windows to Fedora and getting this working was as easy as opening the app store and installing EasyEffects, since PipeWire is already included by default. I also wanted to mention that you can autoload different presets for different output/input devices just like you can do in APO.

I'm glad to see Linux is starting to take over Windows in functionalities and, most importantly, usability.
 

julian_hughes

Senior Member
Joined
Aug 23, 2020
Messages
466
Likes
545
Here's a guide how to use Equalizer APO PEQ presets in Linux for headphone equalization.
.....
Thank you. I found this really useful and it motivated me to try pipewire again. I'd found pulseaudio unsatisfactory and had kept my headless streamers (fanless Intel Atom and orangepi arm64 devices and a server running an old core-i7) running plain alsa direct on the hardware (usb dacs) which is ok but meant using eq and crossfeed, while not impossible, was never slick and simple. On my desktop & laptop I'd been using pulseaudio and not liking it much (in the last year they broke bit-perfect and don't even understand why this is a bug). It was a little frustrating that Neutron Player on my phone was superior, in terms of easy config and ease of use, to what I could do with a latest generation Ryzen 5000 based desktop! Pipewire with wireplumber has proven to be a revelation. I tried pipewire maybe a year ago and it wasn't quite right for me at the time, but the latest stable version (0.3.56) with recent wireplumber is a work of art. Everything works! I edited ~/.config/pipewire/pipewire.conf to specify the sample rates my dacs support and set the bit-depth to 32 and now by default get bit-perfect playback of every stream, on any device I use. Very nice! Easyeffects is a nice enhancement for IEMs and headphones, even on headless systems by using bash aliases: example: I can just type "kato" or "katom" and my output is eq'd for my Moondrop Kato or, respectively, the same eq but with Meier crossfeed first. Switch off all eq and effects? I type "noeq" and hit return. I set up everything on my desktop and found that I could simply copy the config to my headless systems and, following the easyeffects wiki, get everything working identically on those as well. Finally I feel like the sound software architecture is as good as the hardware and I'm loving the convenience and appreciating the music the same way, whatever the device. Great "how to" article!
 

julian_hughes

Senior Member
Joined
Aug 23, 2020
Messages
466
Likes
545
Unfortunately I have found pipewire still ultimately unsatisfactory and have gone back to plain old alsa, configured via ~/.asoundrc. The reason is audible glitches with streaming audio. I use gmediarender (a UPnP/DLNA renderer) on headless streamers, and kodi and gmediarender on desktop/laptop. I find that pipewire, however configured, occasionally produces a horrible pause or click. It is much better than pulseaudio but not perfect. I've adjusted buffer size, cpu governor etc. I've tried running gmediarender via pulsesink, pipewiresink, alsasink, but on every architecture and different linux distro, different kernel, different OS version, networked audio via pipewire always glitches eventually. When I go back to plain alsa then I get perfect playback every time and on every architecture and kernel version and os version. It's a shame, as I loved the convenience of easyeffects on those systems connected to a headphone amp, but ultimately I prefer zero audio defects over convenience.

edit: I'm keeping pipewire, wireplumber and easyeffects on my desktop and laptop because the important use case there is video and playing nice with multiple applications such as web browsers etc. On devices whose audio output is dedicated to music playback then alsa is still better. Not the most convenient, not the most flexible. But if you want *perfect* audio playback there is nothing to match it (and I am including Windows here; I run both Win 10 and Win 11 for gaming and curiosity).
 
Last edited:
Top Bottom