Equalizer in Linux mit PulseAudio, Jack und Calf
Statt den Equalizer pur über ALSA mittels LADSPA-Plugins zu realisieren, kann man auch den aufwändigen Weg gehen und das Ganze über Jack und einem Filter-Plugin machen. Als Filter kommt z.B. das LV2-Plugin Calf in Frage.
Benötigt wird
Benötigt wird folgende Software:
- jack
- qjackctl
- pulseaudio
- calf
- aj-snapshot (optional)
Ablauf
Kurz erklärt, wie das abläuft: Pulseaudio nimmt die Ausgabe der Musik-App entgegen, z.B. über das ALSA-Plugin. Die Audiodaten werden dann über die PulseAudio JACK Sink an JACK übergeben. JACK routet die Daten dann über alle gewünschten Plugins (hier halt den Calf-Equalizer) und dann zur Soundkarte (bzw. in meinem Fall zum USB-DAC). Das sieht dann so aus:
Musik-App --> PulseAudio --> PulseAudio JACK Sink --> JACK --> Filter-Plugins --> USB DAC
Einstellungen
JACK
Als erstes startet man QJackCtl und stellt dort in den Einstellungen die gewünschte Ausgabe-Hardware und das Ausgabeformat ein. Der JACK-Server muss danach neu gestartet werden (falls die Einstellungen nicht übernommen werden, den JACK-Server per Hand über killall beenden und neu starten).
PulseAudio Sink
Dann lädt man das PulseAudio JACK Sink Modul:
pacmd load-module module-jack-sink
Calf
Dann die Calf GUI starten und das gewünschte Plugin zum Rack hinzufügen, z.B. Equalizer 12 Band. Filtereinstellungen wie gewünscht vornehmen:
Die Filtereinstellungen können als Preset abgespeichert werden. Die Presets können biem Start von Calf auch direkt geladen werden.
JACK-Verbindungen
In QJackCtl kann man nun die PulseAudio JACK Sink mit den Filtern verbinden. Das geht über das Patchfeld:
Oder über den Graph:
Es müssen auf jeden Fall beide Kanäle (links/rechts) einzeln verbunden werden! Beim system audio device empfiehlt sich die Option Exklusiv zu setzen, damit nur die Ausgabe des EQs an die Hardware weitergegeben wird.
Die Patchfeld-Einstellungen abspeichern, diese können dann beim Start auch automatisch wieder geladen werden. Alternativ hierzu bietet sich auch das Kommandozeilentool aj-snapshot an, mit dem die JACK-Verbindungen ebenfalls gespeichert und geladen werden können.
PulseAudio Ausgabe
Zu guter letzt muss man nur noch im PulseAudio-Mixer die Ausgabe der Apps auf die PulseAudio JACK Sink umstellen:
Alles in einem Rutsch
Hier noch ein Shellskript, um alles auf einmal zu starten:
#!/bin/bash
echo "Starting JACK"
jackd --no-realtime -dalsa -dhw:v12 -r44100 -p1024 -n2 > /dev/null 2&>1 &
sleep 1
echo "Loading PA module-jack-sink"
pacmd load-module module-jack-sink > /dev/null
#pacmd set-default-sink jack_out > /dev/null
echo "Starting Calf"
calfjackhost eq12:my-calf-preset > /dev/null &
echo "Starting QjackCtl"
qjackctl -a ~/calfEQ.xml > /dev/null &
echo "Done!"
Und zum stoppen:
#!/bin/bash
echo "Unloading PA module-jack-sink"
pacmd unload-module module-jack-sink
echo "Stopping QjackCtl"
killall qjackctl
echo "Stopping Calf"
killall calfjackhost
sleep 1
echo "Stopping JACK"
killall jackd
echo "Done!"