Linux & Sound aus mehreren Soundkarten gleichzeitig

Vor einiger Zeit hatte ich das Projekt:  Mehrere – in meinem Fall 2 – Soundkarten gleichzeitig ansteuern zu können.

Hier der Erfahrungbericht:

Was sich auf den ersten Blick als recht einfache Idee erweisst, ist auf den zweiten Blick doch komplexer als man denkt. Wie es unter Windows überhaupt möglich wäre, weiss ich nicht. Apple wird da sicherlich eine hübsche Möglichkeit haben. Aber ich bin ja Masochist – oder besser gesagt technisch interessierter Frickler –  und benutze für das Abenteuer Linux.

Ich will mich an dieser Stelle nicht über das Soundsystem von Linux auslassen, das haben andere sehr gut erklärt (z.B. hier). Nur soviel, auf die Hardware wird ein Abstraktionsebene aufgesetzt, der sogenannte Soundserver. Dem geneigten Benutzer stehen “ALSA”, “ESD” bzw. “arts”, PulseAudio und “Jack” zur Verfügung. Man sollte von Jack jedoch abstand nehmen, wenn man kein virtuelles Multispur-Studio braucht. Die Konfiguration ist für Anfänger nicht grade geeignet.

Fängt man an zu suchen nach “soundkarten parallel ubuntu” stößt man direkt auf die Möglichkeit mittels PulseAudio und einem netten kleinen Schalter mit der Aufschrift “Combine devices” alle (!!) Soundkarten zu einem virtuellen Gerät zusammenzufügen. Im ersten Augenblick eine einfache und gute Lösung.
Leider fangen damit – zumindest bei mir – die Probleme an.

Eines der Hauptprobleme von PulseAudio ist meiner Ansicht nach, der extreme Hardwarehunger. 20 – 50% Systemlast sind einfach zu viel dafür, das man einfach nur Musik hören möchte. Schaut man im Internet nach möglichen Lösungen, so findet man (u.A. hier) den Vorschlag die CPU-Last auf Kosten der Qualität zu senken.

Das Ausprobieren der verschiedenen Möglichkeiten förderte schlussendlich den Wert

resample-method = speex-float-4

zu tage. Dieser brachte bei – sagen wir – annehmbarer Systemlast (5%) eine vernüftigen Klang zustande. Leider stieß ich jedoch direkt auf das nächste Problem. Spätestens nach 30 Sekunden Soundausgabe – egal aus welcher Quelle – beschleunigten die Ausgabe um etwa das 4-fach. Dies hatte dann zur Folge, dass sich der Sänger von 69Eyes anhörte, als wäre er auf Helium *schüttel*. Das empfohlene Herumspielen mit den Parametern

default-fragments
default-fragment-size-msec

förderte jedoch keine Lösung zu Tage.

Also ging es an’s Weitersuchen. Da mir “Jack” bei all seinen Vorteilen für das normale Musikhören und “Daddeln” zu kompliziert zum einrichten ist, entschied ich mich dafür das Abenteuer ALSA via .asoundrc. Soviel kann ich schon mal sagen: Keine Fehlentscheidung aber mit einer steilen Lernkurve.

Dieser Artikel aus dem Wiki von Ubuntuusers ist ein guter Einstieg. Leider läßt er einen etwas alleine, wenn es um das Verständnis des konkreten Aufbaues der Konfigurationsdatei geht. Dafür gibt es ja a) Foren und b) die offizielle Seite. Wobei ich an dieser Stelle leider sagen muss, dass man an dieser Stelle auch nicht alles an Informationen erhält welche man benötigt.

Die ersten Gehversuche mit dem Wiki-Artikel waren vielversprechend und bieten einen guten Einstieg der auch motiviert das ganze Fortzuführen. Ich bin jedoch sehr schnell an die Grenzen des Artikels und anderer Quellen gestoßen, als es nämlich darum ging, beide Soundkarten zu einem virtuellen Device zu verheiraten. Jedoch brachte mich ein Kommentar oder ähnliches auf die richtige Fährte.

Ursprünglich, war die gelesene Lösung dazu gedacht zwei Soundkarten als Sourround-System zu verwenden. Die Adaption auf mein Problem war dann nur noch der nächste logische Schritt. Die Lösung des ganzen war die Verwendung des “route” Typs der ein “Multi” Device in sich vereinte. Die letzte Hürde – dachte ich –  wäre es nun noch die richtigen Input Kanäle mit den gewünschten Ausgängen zu verbinden. Ich hatte nur keine Anleitung gefunden, die mir erklärte, welche Stelle der ttable welche Seite der Verbindung darstellt. Zudem konnte ich zunächst keine Hinweis darauf finden, wie die Nummerierung vorgenommen wird. Schlussendlich ist das ganze jedoch recht simple:

ttable [InputChannel 0-n] [Output-BindingChannel0-m] [Volume-Change {0-1}]

Wichtig an dieser Stelle ist nur zu wissen, wieviele Kanäle zur Verfügung gestellt werden und wieviele jeweils angesprochen werden sollen.Für die ImputChannel gilt für ein 5.1 Eingangssignal das folgende Schema

#0 – front left
#1 – front right
#2 – rear left
#3 – rear right
#4 – center
#5 – LFE (subwoofer).

Für ein einfaches Stereosignal – wie bei mir – werden nur 0 und 1 benötigt. Für ein 7.1 System muss die Tabelle nach unten erweitert werden. Ich vermute mal, dass der Subwoofer grundsätzlich die letzte Nummer einnimmt.

Nun denn froh auch diese Hürde gemeistert zu haben, stellte ich daraufhin das virtuelle Gerät “Simultane Ausgabe” zur Verfügung und teste das ganze mit dem Befehl

aplay -D default /usr/share/sounds/k3b_error1.wav

Und – wunderbar – es klappte so, wie ich das wollte. Sowohl meine PC-Boxen, als auch die Stereoanlage spuckten den gewünschten Ton aus. Frohen Mutes machte ich mich daran meinen “Amarok” neuzustarten – leider das einzige Manko an diesem Player -. Ergebnis: Kein Ton und kein einziges MP3 wurde erkannt. Zu dem spuckte die Soundverwaltung von KDE nur noch ein gräßliches Gezerre aus den Lautsprechern – zumindest aber allen vieren – aus. Witzigerweise liefen sowohl die Browser als auch VLC korrekt. Dies läßt sich jedoch da durch erklären, dass diese Programme zur Codierung eigene Bibliotheken verwenden.

Alle Versuche die sample-Rate und den Buffer zu verändern verliefen entweder in der totalen Verweigerung einen Ton von sich zu geben oder aber in keiner Besserung. 2 Stunden später stieß ich durch eine Zufall dann auf die Lösung. Ich hatte als slave in der Definition für Phono “default” verwendet. Das ist anscheinend eine Totsünde für Phono. Er möchte an dieser Stelle wesentlich lieber die Verwendung des virtuellen Gerätes “duplex”, dass sich dank “asym” um Wiedergabe und Aufnahme kümmert.

Nun denn es funktioniert nun alles und ich habe wieder ein paar Einblicke in mein geliebtes Linux gewonnen.

Am Ende habe ich euch noch die .asoundrc zur Verfügung gestellt. Mit dieser funktioniert alles einwandfrei bei mir.

So long

Päddah

 
2 Kudos
Don't
move!

Leave a Reply

Your email address will not be published. Required fields are marked *