Mit dem von dir verlinkten Programm kann ich ja nur den Faltungs-Filter ausrechnen, aber nicht ins System einklinken. Mich würde primär interessieren, was man machen muss, dass alles unter Linux über nen Faltungshall rausgehaun wird. Aber auch den Rest fänd ich interessant.
Ich hab seit fast 15 Jahren nen vollparametrischen EQ vor den Monitoren, mit dem senke ich bei den zwei zwei fießesten Resonanzen im Bassbereich soweit ab, dass sich das an meiner Hörposition einigermaßen ausgewogen anhört. Mir hilft das schon enorm, wär aber sehr interessiert, ob da noch mehr geht.
In der Praxis funktioniert sowas bei mir nur, wenn das n separates Gerät macht (also nicht der Computer, mit dem ich gerade arbeite), aber kleine Computer für Spezialzwecke sind heute ja auch nicht mehr sooooo teuer.
Im Prinzip ist es recht simpel, aber DRC hat Unmengen an Parametern und ich habe mich noch nicht überall durchgetestet. Mit den default Settings habe ich aber ein Ergebnis, was mit SW vergbleichbar ist und deutlich besser ist, als wenn ich nur unter 200 Hz mit einem EQ die Überhöhungen rausnehme. Vor alle die Monomitte klingt viel mehr mono mit DRC. was wohl an der Phasenkorrektur liegt, die man mit einem simplen EQ nicht hat.
Als erstes braucht man ein IR file, was man mit REW aufnehmen kann. Dazu REW installieren und einen Sweep aufnehmen von ca. 20 Hz - 20000 Hz (bei mir waren es 30 -20000 Hz). Lautstärke sollte ausreichend hoch sein, also etwa 75 dB - 85 dB.
Micro muß natürlich an der Hörposition sein und gleichen Abstand zu beiden Monitoren haben, was auch dem Monitor - Monitor - Abstand entspricht (Stereodreieck). Das ganze macht man einmal für den linken und rechten Monitor. Den IR kann man sich auch anschauen und er sollte mindestens 1 s lang sein (bei mir sind es z.B. 2 s):
Danach exportiert man sich beide Messungen und benennt sie jeweils mit z.B. rew_ir_left.wav und rew_ir_right.wav. Wichtig ist hier 32 bit zu wählen und das Signal zu normalisieren.
Um nun mit DRC die Filter zu erzeugen muß man die wavs zu pcm Dateien konvertieren, was mit SOX geht.
Code:
sox rew_ir_left.wav -t f32 -r 48000 -c 1 rew_ir_48_left.pcm
sox rew_ir_right.wav -t f32 -r 48000 -c 1 rew_ir_48_right.pcm
Auf die pcm files kann man nun DRC anwenden. In meinem Fall schaut das derzeit so aus :
Code:
drc --BCInFile=/home/marco/DRC_room_correction/rew_ir_48_left.pcm --PSOutFile=/home/marco/DRC_room_correction/filter_48_left.pcm --PSPointsFile="/usr/share/drc/target/48.0 kHz/pa-48.0.txt" --MCFilterType=M --MCPointsFile=/home/marco/DRC_room_correction/35R586_cal_0degree.txt --PLMaxGain=1.2 --PSNormFactor=0.7 "/usr/share/drc/config/48.0 kHz/erb-48.0.drc"
drc --BCInFile=/home/marco/DRC_room_correction/rew_ir_48_right.pcm --PSOutFile=/home/marco/DRC_room_correction/filter_48_right.pcm --PSPointsFile="/usr/share/drc/target/48.0 kHz/pa-48.0.txt" --MCFilterType=M --MCPointsFile=/home/marco/DRC_room_correction/35R586_cal_0degree.txt --PLMaxGain=1.2 --PSNormFactor=0.7 "/usr/share/drc/config/48.0 kHz/erb-48.0.drc"
Man braucht:
1. input file: rew_ir_48_left.pcm
2. output file, was erzeugen werden soll: filter_48_left.pcm
3. das Target (hier pa-48.0.txt = default Target): pa-48.0.txt (findet sich im drc Ordner)
4. MCFilterType=M setzen, um Mic Kalibrierung zu verwenden, ansonsten MCFilterType=N wählen. Ich musste bei meinem Sonarworkskorrekturfile (35R586_cal_0degree.txt) noch zwei Zeilen ergänzen, damit es funktioniert hat (siehe hier:
https://sourceforge.net/p/drc-fir/mailman/message/4180436/).
0 0 in der ersten Zeile (jeweils Frequenz und dB Korrektur
Ausserdem habe ich den letzten dB Wert bei 20000 Hz (= X) nochmals genommen und in der letzten Zeile dann
24000 X ergänzt. Bei einer Samplerate muß dann hier (vermutlich) 22050 stehen, also samplerate / 2.
Ich glaube nicht, dass die Mikrokorrektur kritisch ist, da die Abweichung erst bei hohen Frequenzen größer wird (~4-5 dB bei meinem Mic).
5. PLMaxGain=1.2 gibt an, wie stark geboosted werden darf. Ich habe einen eher kleinen Wert gewählt (siehe Manual). Kleinster Wert ist 1, 0 gibt Grütze.
6. PSNormFactor=0.7 gibt an wie stark die Lautstärke nach dem Filter reduziert wird. Da ja etwas geboostet wird, kann es vorkommen, dass man über 0 dBFS kommt. Ich habe das durch Trial and Error ausprobiert und jeweils die Lautstärke vor und nach dem Filter geprüft. Bei 0.7 ist Eingang nahezu Ausgang. Bei 0.6 verliere ich ca. 2 dB.
7. Config file: erb-48.0.drc (siehe Manual)
Wichtig: Man muß immer konsistent auf die Files der richtigen Samplerate (im jeweiligen Ordner) verweisen, d.h. entweder 48 kHz oder 44.1 kHz. Der Sweep sollte entsprechend auch mit der richtigen Rate aufgenommen sein.
Das ganze erzeugt nun wieder zwei filter pcm files, die man - um sie mit einem Convolver zu verwenden - wieder in WAVs konvertieren muß:
Code:
sox -t f32 -r 48000 -c 1 filter_48_left.pcm filter_48_left.wav
sox -t f32 -r 48000 -c 1 filter_48_right.pcm filter_48_right.wav
Die beiden filter files kann man nun in z.B. jconvolver laden. Hierzu habe ich folgendes config file (jc.config) gemacht:
Code:
# This file is for use at 48 kHz.
#
#
# Verzeichnis wo die Filter files sind:
#
#/cd /home/
#
# in out partition maxsize
# ---------------------------------------------------------------
/convolver/new 2 2 1024 65536
#
# in out gain delay offset length chan file
# --------------------------------------------------------------------------
#/impulse/read 1 1 0.6 0 0 0 1 filter_48_left.wav
#/impulse/read 2 2 0.6 0 0 0 1 filter_48_right.wav
/impulse/read 1 1 1.0 0 0 0 1 filter_48_left.wav
/impulse/read 2 2 1.0 0 0 0 1 filter_48_right.wav
Anmerkung: Den gain kann man nachträglich auch in jconvolver etwas reduzieren, aber ich habe gleich den filter entsprechend erzeugt.
jconvolver rufe ich dann über ein Terminal mit "jconvolver jc.config" auf.
Für das Routing verwende ich Carla, hier z.B. mit zwei Metern um vor und nach dem Filter zu messen:
Wenn ich jetzt pink noise durch den Filter schicke, dann schaut mein Signal danach so aus (gelb nach, rot vor dem Filter):
Das schaut auch gut aus:
https://github.com/HEnquist/camilladsp, habe ich aber noch nicht ausprobiert. Das könnte man auch als Convolver nehmen.