Es gibt sehr viele IRS. Am besten geeignet sind offensichtlich BRIR (binaural room impulse response) Samples, die auch die Einflüsse des Raumes berücksichtigen. Als erstes habe ich es mit BRIR-Dateien von der BBC [1] versucht, die man sich unter einer Creative Commons Lizenz hier [2] herunterladen können sollte, was der Server aber nicht zu erlauben scheint. Einen Teil der Dateien gibt es aber außerdem auf github [3].
Ich habe mich dann aber doch lieber auf die Vorarbeit von "musicreo" im HIFI-Forum verlassen. Den dortigen Thread habe ich ja schon verlinkt [4]. Im vorläufig letzten Beitrag (#43) wird dort ein
ZIP-Archiv angeboten. Neben musicreos Anleitung für Windows befindet sich darin ein weiteres zip-Archiv mit den vorbereiteten IRS und zwar
BinauralAudio.zip.
Die darin enthaltenen IRS stehen unter CC BY-SA 3.0 [6] und wurden ursprünglich von der Fachhochschule Köln [5] veröffentlicht. musicreo aus dem HIFI-Forum hat aus dem vorliegenden Matlab-Format WAV-Dateien erstellt.
Für diese Anleitung habe ich mir die Datei
Code: Alles auswählen
wav impulse responsefiles/48 Khz/7_1/AKG-K701/CR1_KU_ROTM_AKG-K701_(L_R_C_LFE_LS_RS_LB_RB)_396ms.wav
herausgepickt. Sie enthält alles, was für 7.1 notwendig ist, hat also immerhin 16 Spuren, entzerrt für einen bestimmten Kopfhörer, den AKG 701, es sollte aber auch mit anderen offenen Kopfhörern sehr gut funktionieren. Für Stereo benötigen wir nur den vorderen linken und rechten Lautsprecher, das wären die ersten 4 Kanäle.
Also kopieren wir die Datei in einen neuen Ordner
~/brutefir und erstellen darin aus diesen Kanälen im folgenden die notwendigen einkanaligeen raw/pcm-Dateien mit 44100 Hz Samplerate:
Code: Alles auswählen
$ sox CR1_KU_ROTM_AKG-K701_\(L_R_C_LFE_LS_RS_LB_RB\)_396ms.wav -t raw left2left.pcm rate -v 44100 remix 1
$ sox CR1_KU_ROTM_AKG-K701_\(L_R_C_LFE_LS_RS_LB_RB\)_396ms.wav -t raw left2right.pcm rate -v 44100 remix 2
$ sox CR1_KU_ROTM_AKG-K701_\(L_R_C_LFE_LS_RS_LB_RB\)_396ms.wav -t raw right2left.pcm rate -v 44100 remix 3
$ sox CR1_KU_ROTM_AKG-K701_\(L_R_C_LFE_LS_RS_LB_RB\)_396ms.wav -t raw right2right.pcm rate -v 44100 remix 4
Die entstandenen pcm-Dateien haben keinen Header mehr, der brutefir ohnehin nur im Weg wäre. Das Format der Daten ist Sampleformat: 16 bit Little Endian, Samplerate: 44100 Hz und ein Kanal (mono).
Nun müssen wir brutefir anweisen, diese Dateien auch zum Convolving zu verwenden, dazu verwende ich folgende
~/.brutefir_config
Code: Alles auswählen
float_bits: 32;
sampling_rate: 44100;
filter_length: 65536;
show_progress: true;
allow_poll_mode: false;
modules_path: ".";
monitor_rate: false;
powersave: true;
lock_memory: true;
safety_limit: -0.01;
input "left_in", "right_in" {
device: "alsa" { device: "hw:Loopback,1";};
sample: "S16_LE";
channels: 2/0,1;
delay: 0,0;
maxdelay: -1;
subdelay: 0,0;
mute: false,false;
};
output "left_out", "right_out" {
device: "alsa" { device: "hw:PCH,0";};
sample: "S32_LE";
channels: 2/0,1;
delay: 0,0;
maxdelay: -1;
subdelay: 0,0;
mute: false,false;
dither: true;
};
coeff "left_to_left" {
filename: "/home/smutbert/brutefir/left2left.pcm";
format: "S16_LE";
attenuation: 0.0;
blocks: -1;
shared_mem: false;
};
coeff "left_to_right" {
filename: "/home/smutbert/brutefir/left2right.pcm";
format: "S16_LE";
attenuation: 0.0;
blocks: -1;
skip: 44;
shared_mem: false;
};
coeff "right_to_left" {
filename: "/home/smutbert/brutefir/right2left.pcm";
format: "S16_LE";
attenuation: 0.0;
blocks: -1;
skip: 0;
shared_mem: false;
};
coeff "right_to_right" {
filename: "/home/smutbert/brutefir/right2right.pcm";
format: "S16_LE";
attenuation: 0.0;
blocks: -1;
skip: 0;
shared_mem: false;
};
filter "left_to_left" {
from_inputs: "left_in"/15;
to_outputs: "left_out";
process: -1;
coeff: "left_to_left";
delay: 0;
crossfade: false;
};
filter "left_to_right" {
from_inputs: "left_in"/15;
to_outputs: "right_out";
process: -1;
coeff: "left_to_right";
delay: 0;
crossfade: false;
};
filter "right_to_left" {
from_inputs: "right_in"/15;
to_outputs: "left_out";
process: -1;
coeff: "right_to_left";
delay: 0;
crossfade: false;
};
filter "right_to_right" {
from_inputs: "right_in"/15;
to_outputs: "right_out";
process: -1;
coeff: "right_to_right";
delay: 0;
crossfade: false;
};
Durch das Convolving werden die Signale ja quasi zT über die Zeit und die Kanäle hinweg addiert, der Pegel kann also durch das Convolving durchaus merkbar größer werden. Deshalb wird das Signal in den Filtern beim Eingang um 15 dB verringert (attenuation=Dämpfung). Trotzdem gibt es noch eine Sicherheitsmaßnahme, das safety_limit am Anfang der Konfigurationsdatei: brutefir bricht ab, sobald der Ausgangspegel über -0,01 dB hinausgeht.
Nachdem brutefir ua auch für aktive Lautsprecherweichen verwendet wird, dient das dem Schutz der Hardware. Ich habe auch schon Berichte von jemandem gelesen, der sich mit brutefir, vermutlich aufgrund eines Bugs, seine Hochtöner „gegrillt“ hat…
Die ALSA-Gerätebezeichnung des Ausgabegerätes und die Pfade zu dem pcm-Dateien müssen natürlich den Gegebenheiten angepasst werden, aber danach muss man nur noch brutefir starten.
Jede Audioausgabe an das Loopbackgerät "hw:Loopback,0" oder um etwas mehr Freiheit bei der Wahl der Formate zu haben "plughw:Loopback,0" wird dann von brutefir verarbeitet und am Ausgabegerät ausgegeben. Dabei gibt brutefir laufend Meldungen aus und informiert auch darüber, wenn gerade keine Audioausgabe läuft, mit der Meldung
Würde mich freuen, wenn das sonst noch jemand ausprobieren möchte (und vielleicht hier davon berichtet).
[1]
http://www.bbc.co.uk/rd/publications/sbsbrir
[2]
http://data.bbcarp.org.uk/sbsbrir/wav
[3]
https://github.com/ssr-scenes/bbcrd/tre ... bsbrir/irs
[4]
http://www.hifi-forum.de/index.php?acti ... thread=654
[5]
http://www.audiogroup.web.fh-koeln.de/
[6]
http://creativecommons.org/licenses/by-sa/3.0/legalcode