On Fri, Mar 28, 2025 at 12:47:06AM +0100, Michael Jarosch wrote:
Steps missing? Or am I totally wrong, here? What tools
can I use?
So you want both crossover and room correction filters.
The first thing to do is to separate the two problems:
1. First implement the crossover processing.
2. Once you have that in place, measure the speakers and/or
room and implement the correction filters.
One reason is that (1) will affect (2), the other is that
combining the two from the start is more complicated and
a sure recipe for errors.
When you have both, it would be possible to combine the
two into a single FIR filtering operation, but there is
nothing gained by doing this and I would advise strongly
against doing this.
1. For the crossover you can use zita-lrx wich will
provide 2, 3 or 4 way Linkwitz-Riley filters along with
configurable gain and delay for each band. Zita-lrx is
a command line Jack application. Once you have the correct
configuration file you can run it with a single command
which will also to care of Jack connections.
2. For speaker/room correction the best open-source solution
is DRC (Digital Room Correction) by Denis Sbragion.
<https://drc-fir.sourceforge.net/>
DRC uses some quite sophisticated methods to 'invert' the
measured responses. Doing this correctly is not as simple
as you may imagine. For example you will need frequency-
dependent windowing - at low frequencies you can correct
both the room and the speakers, while for higher frequencies
only the 'direct' sound should be corrected. The DRC manual
goes into a lot of detail to explain all of this and you'll
need some time to absorb and understand all of it. But AFAIK
this is the only tool that gets it right.
To measure the speaker/room response you can use the tool
provided by DRC, or e.g. Aliki, or zita-jacktools (more
about that later).
To do the actual filtering you can use jconvolver.
3. An alternative approach is to use zita-jacktools for
everything. This is a collection of DSP processsors.
Each of them is a Jack application and also a Python
class (the actual DSP is of course all done in C++).
It has both crossover filters and convolution processors,
and a lot more.
Using this you could create a simple Python script
that combines all the processing. One advantage is
that since everyhing is controlled by Python, you
can easily add a GUI (using e.g. PyQt) or remote
control.
You could also use zita-jacktools to automate all
the measurements, so you can repeat them easily.
Just write if you need more help.
--
FA