Equalizer in Linux mit ALSA
Ich habe mir neue In-Ear Kopfhörer gekauft (Tin HiFi P1), die für mich zwar prinzipiell super klingen, aber im Bassbereich eine mangelnde Quantität (nicht Qualität!) aufweisen. Also was soll’s, da nehme ich doch einfach einen Equalizer und hebe den Bass ein gutes Stück an. Statt das per Hardware zu machen, z.B. mit einem Behringer DEQ2496, dachte ich mir: “Mach’s doch einfach gleich am Rechner, der die Musik abspielt.” Denn dann geht das auch am Notebook oder mit einem USB DAC.
Möglichkeiten in Linux
Pulseeffects
Mit Pulseeffects hat man die unendlichen Möglichkeiten an Klangeffekten, alles schön mit graphischer Oberfläche. Leider war mir die CPU-Auslastung für ein bisschen EQ hier zu hoch.
Alsaequal
Eins Stufe drunter liegt Alsaequal. Das Projekt sieht mir aber ziemlich tot aus.
LADSPA-Plugins direkt in ALSA
Man kann die LADSPA-Plugins, die Pulseeffects und Alsaequal für das Sound-Processing nutzen, auch direkt in ALSA einbinden. Das wollte ich mal probieren.
Wie läuft das ab?
Kurz erklärt, wie das abläuft: Man legt ein virtuelles Audio-Gerät an und dieses wird von der Musik-App als Ausgabegerät genutzt. Dabei werden die Audiodaten dann über das LADSPA-Plugin geroutet (für das Sound-Processing) und dann weiter zur eigentlichen Soundkarte (bzw. in meinem Fall zum USB-DAC). Zwischen Musik-App (Eingabe), LADSPA-Plugin (Processing) und USB-DAC (Ausgabe) braucht man noch das sogenannte “plug”-Plugin. Das passt automatisch das Audioformat so an, wie es die jeweils nächste Stufe braucht. Das sieht dann so aus:
Musik-App --> virtual plug device --> LADSPA plugins --> another virtual plug device --> USB DAC
Audio-Geräte
Die vorhanden Audiogeräte kann man mit dem Befehl aplay -L
anzeigen. Da findet sich dann für meinen Sabaj DA3 USB DAC u.a. folgendes:
front:CARD=v12,DEV=0
SABAJ DA3 v1.2, USB Audio
Front output / input
Den Namen des Geräts braucht man dann in der asound.conf.
10-Band Equalizer
Für den 10 Band Equalizer benutze ich ein Plugin aus den LADSPA SWH Plugins (Amp) und ein Plugin aus den LADSPA Caps Plugins (EQ10). Da ich den Bass anheben will, muss ich erstmal etwas Headroom dafür schaffen, sonst kann es zum Übersteuern kommen (Clipping). Deshalb senkt das Amp Plugin den Gesamtpegel des Audiosignals erstmal ab, bevor es in den eigentlichen EQ geht.
In der /etc/asound.conf
muss man folgendes einstellen:
pcm.eq10 {
type plug
slave.pcm ladspa_eq10
}
pcm.plugsabajusb {
type plug
slave.pcm "front:CARD=v12,DEV=0"
}
pcm.ladspa_eq10 {
type ladspa
slave.pcm "plugsabajusb"
path "/usr/lib64/ladspa"
plugins [
{
# LADSPA SWH plugin "Amp"
# Controls the gain of the input signal in dB's (range: -70 dB .. +70 dB)
id 1181
input {
# lower gain to get some headroom before amplifying bands with equaliser
controls [ -7.5 ]
}
}
{
# LADSPA Caps plugin "EQ10" (http://quitte.de/dsp/caps.html#Eq10)
# A classic octave-band constant-Q second-order filter design, basically a direct digital translation of an analog original.
# 10 band equaliser frequencies: 31 Hz, 63 Hz, 125 Hz, 250 Hz, 500 Hz, 1 kHz, 2 kHz, 4 kHz, 8 kHz, 16 kHz (range -48 dB .. +24dB)
id 1773
input {
controls [ 3.8 7.5 1.5 0 0 0 0 0 0 0 ]
}
}
]
}
Um nochmal das Audio-Routing für diese konkrete Konfiguration zu verdeutlichen:
Musik-App --> pcm.eq10 --> pcm.ladspa_eq10 --> pcm.plugsabajusb --> front:CARD=v12,DEV=0 (USB DAC)
Parametrischer Equalizer
Auch ein Parametrischer Equalizer ist möglich. Den gibt’s in den Caps Plugins. Hier spare ich mir das Amp-Plugin vorher, denn ich erhöhe nicht nur den Bassbereich, sondern senke mittels Kuhschwanzfilter einfach den gesamten Mitten-/Höhenbereich. Das sieht dann so aus:
pcm.eq4p {
type plug
slave.pcm ladspa_eq4p
}
pcm.plugsabajusb {
type plug
slave.pcm "front:CARD=v12,DEV=0"
}
pcm.ladspa_eq4p {
type ladspa
slave.pcm "plugsabajusb"
path "/usr/lib64/ladspa"
plugins [
{
# LADSPA Caps plugin "EQ4p" (http://quitte.de/dsp/caps.html#Eq4p)
# There are four sets of four numbers: mode, f, Q, gain
# modes: -1 off, 0 lowshelve, 1 band, 2 hishelve
id 2608
input {
# lowshelve lowshelve off hishelve
controls [ 0 20 0.6 -3 0 50 0.4 3 -1 0 0 0 2 80 0.2 -4.5 ]
}
}
]
}
Mehr oder weniger wird hier über 80 Hz um 4,5 dB abgesenkt. Unter 50 Hz werden nochmal 3 dB draufgelegt, die unter 20 Hz wieder abgezogen werden. Mit den Q-Faktoren gibt das dann halt irgendeine Ausgleichskurve.
Musikplayer
Meine Musik spiele ich mit Squeezelite ab. Dem Player teilt man dann das Ausgabegerät folgendermaßen mit:
squeezelite -o eq4p ...