Unixery & daemon worship ­čöą


It's a Unix system! I know this!

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:

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: Calf EQ

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: QJackCtl Patchfeld

Oder ├╝ber den Graph: QJackCtl 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:

PulseAudio Mixer

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!"