Samstag, 7. März 2009

2.1 + 2.0 = 4.1, und das unter Linux

Surround-Sound ist etwas durchaus schönes, wäre nur die dafür erforderliche Hardware (die Lautsprecher) nicht so wahnsinnig teuer, wenn sie denn etwas taugen sollen. Aus diesem Grunde gab es bei mir bisher nur ein 2.1-System (also Stereo-Boxen mit einem Subwoofer). Doch mit ein paar billigen Boxen (die man evtl. noch herumliegen hat) für die hinteren Kanäle, kann man daraus ein 4.1-System machen - und den fehlenden Center-Kanal kann man auf die beiden vorderen Kanäle verteilen; fertig ist der Raumklang!

Soweit die Theorie; alleine: die Praxis der Sound-Configuration unter Linux ist noch immer ein Abstieg in die Tiefen von schlecht dokumentierten Konfigurationsdateien...

Der Hardware-Teil ist schnell erklärt: Das 2.1-System bleibt angeschlossen, wie es ist; das 2.0-System wird an den "Rear Out" (bei mir eine graue Buchse) angeschlossen.

Für den groben Einstieg hilft das Wiki von Ubuntuusers.de. In diesem gibt es eine Seite über die .asoundrc, die in diesem Problem die Hauptrolle spielt. In dem Wiki findet sich recht weit unten ein Beispiel eines 5.1-Surround-Systems. Dieses dient uns als Ausgangsbasis. Als allererstes sollte man einmal prüfen, ob alle Kanäle wirklich da sind, wo sie hingehören; dies war in meinem Falle nämlich nicht gegeben. Also ein speaker-test -c 6 starten und darauf achten, ob der Ton aus den richtigen Boxen kommt. Wenn nicht, kommt der Block mit den 6 Bindings dran, in dem die Einträge dem Muster "Soll Ist" folgen. Bei mir war die Reihenfolge beispielsweise Vorne Links, Vorne Rechts, Center, Bass, Hinten Links, Hinten Rechts.

Nun brauchen wir einen kleinen Downmixer, da uns ja eine Center-Box fehlt:
pcm.downmix{
type route
slave.pcm dmixer
slave.channels 6
ttable.0.0 1
ttable.1.1 1
ttable.2.2 1
ttable.3.3 1
ttable.4.0 0.5
ttable.4.1 0.5
ttable.5.5 1
}
Das ganze ist schnell erklärt: Jeder Kanal, der rein geht, wird über eine ttable-Anweisung auf einen Ausgabe-Kanal geschickt. Für die meisten davon ist das ein "rein wie raus", nur Kanal 4 (der Center) braucht etwas Zuneigung: ttable.4.0 0.5 besagt, dass Kanal 4 mit halber Lautstärke auf Kanal 0 (Vorne Links) ausgegeben wird. Die andere Hälfte der Lautstärke geht nach Vorne rechts. Der Unterschied ist in der Praxis kaum zu hören, so einen Mono-Upmix macht seit ca. 40 Jahren jedes Radio.

Zusätzlich muss der Downmixer noch in die normale Arbeitsschleife eingebaut werden, indem man in pcm.duplex ein playback.pcm "downmix" statt des bisherigen dmixer einträgt. Der dmixer wird dann erst durch den downmix aufgerufen.

Ab diesem Moment steht dem System ein 5.1-Sound zur Verfügung; denn die Anwendungen selbst wissen nichts von dem fehlenden Kanal. Nur OpenAL-Programme (also praktisch sämtliche Spiele) müssen nochmal ausdrücklich darauf hingewiesen werden. Im Netz finden sich viele Erklärungen, die von einer Datei .openalrc reden, diese bringen uns aber nicht weiter, denn die Datei ist veraltet. Stattdessen findet sich in /etc/openal/alsoft.conf die Lösung. In dieser Datei findet sich ziemlich am Anfang bereits eine Variable format. Voreingestellt ist sie (auch wenn nix da steht) auf AL_FORMAT_STEREO16, was einen 16Bit-Stereo ergibt. Nicht schlecht, aber nicht was wir suchen. Mit AL_FORMAT_51CHN16 werden wir glücklicher. Übrigens habe ich nebenbei herausgefunden, dass man über diese Datei wohl auch die Standorte der Lautsprecher ausgleichen kann, wenn irgendeiner davon so gar nicht ideal platziert ist; ein Schicksal das in meinem Falle Rear Left ereilt hat; wie das genau geht, habe ich aber noch nicht ergründet ;)

Hat man diesen Krampf einmal ausgefochten, steht einem 4.1-Genuss auch in diversen Spielen nichts im Wege. In UT99 funktioniert das ganze allerdings nicht; dagegen muss man bei UT2004 nicht einmal irgendetwas einstellen; es gibt sofort Surround-Sound.

Keine Kommentare: