Equalizing audio under linux / Raspberry Pi I have an audio streaming receiver written in Python running on a raspberry pi. This receiver writes the streamed audio out to an alsa device, which in turn passes it to an amplifier which is driving a DML speaker that I made. DML speakers require rather heavy equalization to make them sound correct - so I want to add in digital signal processing on the rpi.
Using Room EQ Wizard, I have created a correction filter. I am able to see the raw equalizer values (frequency, gain and Q), and also export the filter as an impulse response wav. I have tested this IR wav using shairport-sync (I even wrote the directions) and it works very well.
The question is how to implement the equalization under linux (headless, no GUI) for audio that is coming from a python script.
I think there are three different routes that could work -

using a software based graphic equalizer
applying convolution to the audio signal either under ALSA after the audio is written by python
or directly in python before it is written

There is an alsa equalizer plugin, however this is too limited as there aren't enough bands, the bands are preset frequencies, and the Q is not adjustable.
There is also an experimental alsa convolution plugin, which unfortunately I can't get working.
I have also found this question which lead me to ponder whether or not python could apply the convolution directly. Unfortunately I am not a python (or audio processing) expert, so this would take quite a lot of effort to figure out.
Is anyone aware of an equalizer or alsa plugin that will do what I need?
You can simply implement this as an IIR filter directly in Python using https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.sosfilt.html
Each Room EQ wizard section can be turned into a second order filter section using RBJs Audio EQ Cookbook (See for example https://webaudio.github.io/Audio-EQ-Cookbook/audio-eq-cookbook.html or https://www.musicdsp.org/en/latest/Filters/197-rbj-audio-eq-cookbook.html). You want the &quot;peaking EQ&quot;. Then just cascade all sections into a single SOS.
Note: If your filter parameters look like https://github.com/mikebrady/shairport-sync/wiki/Digital-Signal-Processing-with-Shairport-Sync I advise some caution: You have a lot of VERY high Q features are 6 Hz/12 Hz (very low freqencies). These could be numerically unstable and you really don't need them. I would eliminate all sections below 30 Hz and just make sure you have decent highpass filter somewhere in the signal chain.