JACK, Linux und ein neues Spielzeug
Hin und wieder komme ich in Versuchung mit der Soundwiedergabe unter Linux herumzuspielen. Nachdem ich nun mit der Zeit grundlegende Konzepte von OSS, PulseAudio und ALSA verstanden hatte, kam ich mit den meisten Problemen klar. Natürlich gibt es nach wie vor eine paar Fragezeichen und manchen Programmen schweigen in bestimmten Situationen vor sich hin, aber der Nebel lichtet sich. Also war es an der Zeit sich neue Probleme zu schaffen und mit einem Soundserver herumzuspielen, den ich mir schon länger ansehen wollte:
JACK (JACK Audio Connection Kit)
Mit JACK lassen sich Ein- und Ausgänge von Audioprogrammen verwalten und verbinden. Das Routing hat dabei nur eine sehr geringe Latenz zur Folge, was auch einen produktiven Einsatz erlaubt. Gerade in Verbindung mit einem Realtime-Kernel lassen sich oft sehr gute Geschwindigkeiten erreichen. Diesen habe ich hier aber nicht verwendet. Auch um mal zu testen was ohne so drin ist. Mein Linux ist momentan ein Ubuntu 9.04. Einen guten Einblick in JACK liefert der Knowing Jack-Artikel aus dem „Linux Magazine“.
Installation
Installiert habe ich JACK direkt aus dem Ubuntu Repository (Universe):
Es empfiehlt sich zusätzlich eine GUI wie qjackctl
zu installieren und auch ein Testprogramm wie den Sequencer Hydrogen
ist sehr hlifreich:
Normalerweise sollte durch qjackctl
auch der JACK-Daemon gestartet werden, nur ermöglichen dies die Standardeinstellungen bei mir nicht. Daher ist es zu Beginn viellecht einfacher, erst manuell jackd
und danach qjackctl
zu starten. Bei mir sieht das folgendermaßen aus:
sudo qjackctl &
Dabei kann man mittels dem „-d“-Parameter der zu nutzende Soundtreiber konfiguriert werden. Weitere Informationen zu den Parametern gibt es wie immer in den Manual-Pages. In meinem Falle nutze ich eben ALSA („-d alsa“) und die zweite Soundkarte in meinem Computer („-d hw:1“).
In den ersten Tests hatte ich immer das Problem, zwar routen zu können, aber nichts zu hören. Irgenwann viel mir auf, dass mir
qjackctl
nur zwei „beschreibbare“ Ausgänge (Ausgänge, an die Sound geschickt werden kann) anbot. Nun ist hier aber eine 7.1-Soundkarte verbaut und entsprechend sollten da auch acht Kanäle verfügbar sein. Wählt man nicht explizit einen Soundchip aus, ist die erste Soundkarte der Standard (= „-d hw:0”). Mittels ALSA lassen sich die verfügbaren Karten anzeigen:0 [GuitarPort ]: line6usb - GuitarPort
Line6 GuitarPort at USB 6-1:1.0
1 [Intel ]: HDA-Intel - HDA Intel
HDA Intel at 0xf9ff8000 irq 22
Das wird auf anderen Rechnern sicher anders aussehen, aber hier bekommt man die Information her, was man alles wählen kann. Sofern man keinen Realtime-Kernel hat, sollte man auch auf die „-R“-Option verzichten.
Verwendung
Hat man den Daemon und qjackctl
gestartet,lassen sich einige Fenster öffnen, din den aktuellen Status von JACK wiedergeben. Das könnte dann folgendermaßen aussehen:
JACK Desktop
Rechts oben ist das eigentliche Hauptfenster von qjackctl
zu sehen. Die Verbindungen selbst lassen sich im Fenster links unten verwalten. Statusinformationen werden gut lesbar und farblich hervorgehoben auf der rechten Seite präsentiert.
Man sieht im Verbindungsfenster, dass die beiden Ausgänge von Hydrogen über die acht Kanäle irgendwie verteilt werden und der Output somit hörbar ist. Der Sequencer selbst ist hier zu sehen:
Hydrogen
Zum weiteren Testen habe ich noch creox
installiert. Dieser (Gitarren-)Effektprozissor unterstützt auch JACK und somit kann ich den Hydrogen-Beat durch Creox und dessen Output widerum zur Soundkarte routen. Schon damit lassen sich lustige Dinge machen. Zuvor habe ich zwar auch schon mit Soundprogrammen gearbeitet, aber das Zusammenspiel einzelner Programme ist mir neu. Ich glaube das wird ein super Spielzeug. Mittels VST-Plugins und Rewire würde man wohl eine kommerzielle Windows-Lösung für sowas finden.
Amarok bzw. Xine
Verwendet man Ubuntu, ist JACK nicht im Main-Repository eingegliedert. Das hat zur Folge, dass Programme und Bibliotheken im Main-Repo keine JACK-Abhängigkeiten haben dürfen. Mehr dazu hier. Damit hat auch die xine-Bibliothek, die für mein Amarok das Backend darstellt, unter Ubuntu kein JACK-Plugin an Board.
Eine einfache Möglichkeit Xine und Amarok dennoch dieses Plugin zur Verfügung zu stellen, ist es sich selbiges aus einem Debin-Repository zu holen und zu benutzen. Das passende deb-Packet läd man sich runter und entpackt es:
Im Archiv befindet sich das Plugin dann als „
xineplug_ao_out_jack.so
“ unter Pfad „usr/lib/xine/plugins/1.26/
“ (Versionsnummer kann sich ändern). Dise muss anschließend ins lokale Pluginverzeichni kopiert werden. Bei mir nach „/usr/lib/xine/plugins/1.26/
“. Nach einem Neustart von Amarok ist JACK als Ausgabegerät verfügbar. Um das herauszufinden war dieser Forumseintrag sehr hilfreich. Dort werden auch noch andere Möglichkeiten diskutiert.
Probleme
Leider habe ich nach wie vor ein paar ungelöste Probleme:
- Soll eine Anwendung JACK nutzen können, muss sie im Moment mit root-Rechten („sudo“ in Ubuntu) gestartet werden. Das ist schlecht und legt vermutlich an irgendeiner fehlenden Gruppenzugehörigkeit.
- Das Fehlen eines Realtime-Kerneli macht sich schon bei der Nutzung von Potamus (Sehr kleines GTK-Musikabspielprogramm mit JACK-Support), Hydrogen und Creox bemerkbar: Hin und wieder ist ein kurzes Knacksen zu hören und der JACK-Log spricht von einigen XRUNs. Zum RT-Linux gibts hier einige Infos.
- Mein Line6 GuitarPort läuft noch nicht mit JACK.
- PulseAudio-Anwendungen laufen nicht während JACK läuft (wie z. B. Adobes schlechter Flashplayer).
Das werde ich demnächst aber angehen. Bis dahin freue ich mich aber erstmal über die neuen Möglichkeiten der Linux-Audio-Möglichkeiten. Es gibt sehr viele brauchbare Programme und malsehen, vielleicht findet doch noch ein Linux-Rechner den Weg in den Band-Proberaum :-).
Hin und wieder komme ich in Versuchung mit der Soundwiedergabe unter Linux herumzuspielen. Nachdem ich nun mit der Zeit grundlegende Konzepte von OSS, PulseAudio und ALSA verstanden hatte, kam ich mit den meisten Problemen klar. Natürlich gibt es nach wie vor eine paar Fragezeichen und manchen Programmen schweigen in bestimmten Situationen vor sich hin, aber der Nebel lichtet sich. Also war es an der Zeit sich neue Probleme zu schaffen und mit einem Soundserver herumzuspielen, den ich mir schon länger ansehen wollte: