V2.1.1 of PulseEqualizerGUI is very stable, runs smooth on various systems including Kodi 19.3@raspberry 3B and I haven't found any issues so far.
So time for some thoughts on the
quality of the pulseaudio equalizer compared to other equalizers available on Linux. I did have a closer look in its and other equalizers source code and came to the following conclusion.
Upfront, I think pulseaudio is currently the best equalizer available on Linux, if it comes to consumer audio streaming. The equalizer is designed around audio quality on the cost of cpu resources required and latency introduced. Pulseaudio equalizer is a fast convolution equalizer, it runs very stable, in two years I had not a single crash caused by this equalizer.
With it's FFT size of 65536 @ 44100 or 48000 sample rate, it has a frequency resolution of 0,67 Hz, so it does very well on low frequencies which is a major concern for FFT based audio filters. Like any FIR filter, it keeps the phases and does not amplify intermediate frequencies (what IIR or bi-quad filter cascades would do). Due to it's high frequency resolution (it has 32768 bands), it is optimal for digital room correction and also enables some special use cases, for example the treatment for special forms of tinnitus, as it is possible to filter one or more frequencies with very narrow bands (Kodi's PulseEqualizerGUI can be configured for this).
Unfortunately, all this come with some compromises.
With it's hard coded sliding window size of 15999 samples, it introduces a latency of 363ms@44100 and 333ms@48000. This is not reported back correctly to applications like Kodi, which causes a sync problem of the audio and video stream. As a work around, PulseEqualizerGUI does sets the port latency of the output sink to 350ms if the equalizer is in the playback stream, so Audio and Video are in sync again.
With its high cpu usage compared to other equalizers, it may introduce some auditable artifacts on systems with low cpu power. Nowadays however, even the raspberry PI3B has already more than sufficient power to run the equalizer smoothly with two channels and KODI 19.3 decoding x264 (thanks to the kodi developers).
How does pulseaudio equalizer compare to other equalizers.
Other equalizers are often designed around cpu performance and low latency rather than quality. Outside the streaming world (gaming, live music, professional music mastering), latency is quite an important topic.
Examples are the
EQ10 used by ALSA equalizer and
mbeq_1197 used by this
project for Linux desktop, of course there are also others.
EQ10 is a 10 band bi-quad, with the typical disadvantages of IIR filter like phase shifting and potential intermediate frequency amplification. Though it is a very good equalizer in live music environments or where CPU is a concern, it is not so ideal for digital room correction due to it's limitation to 10 Bands and frequency shifts. In my tests, it also had some ugly noise when starting playback with Kodi using this equalizer.
mbeq_1197 is a FFT equalizer with a FFT window size of 1024 samples. This gives a frequency resolution of 43Hz@44100 which destroys the signal for low frequencies. That means it can process 43Hz, 86Hz, 129Hz,... all frequencies in between those frequencies are rounded to those frequencies when this equalizer is used. I personally can clearly hear the difference of 43 and 86 Hz. On the positive side, it has a latency of only 23ms which might be useful for low latency use cases if audio quality is not so much a concern.
What does the future bring.
With pipewire around the corner, this is a very valid question. Though pipewire claims to be an adequate replacement for pulseaudio, currently it does not come with an equalizer and there a no plans to implement one. As a replacement it suggest the LADSPA module with an equalizer on top (e.q. EQ10 or mbeq_1197).
LADSPA is quite old and has some shortcomings in it's interface, that would make equalizer implementations like the pulseaudio one difficult.
LV2 (the LADSPA successor) is currently not available on pipewire but some how in the plans. It still needs someone to implement a fast convolution equalizer based on LV2, or is there already one?