Hit the Road Jack: Arbeiten mit QJackctl

Nachdem ich mich durch den Schnittstellen- und Formate-Dschungel im Linux-Universum gekämpft habe, will ich mich dieses Mal mit einer kleinen, aber äußerst mächtigen Anwendung näher beschäftigen, die sich als Kommunikations-Zentrale um das Verteilen und Routen von sowohl physikalischen wie auch virtuellen Signalströmen kümmert, MIDI inklusive. Die Rede ist von QJackctl, das eigentlich nur ein Frontend zur Steuerung des im Hintergrund arbeitenden Jack-Servers ist.

Wer auf Windows und Mac schon mit Audio-Interfaces gearbeitet hat, wird dabei viele Parallelen entdecken und sich im Umgang im Großen und Ganzen recht heimisch fühlen. Denn die Ausstattung von QJackctl ist vergleichbar mit den virtuellen Mixern, die sich bei der Treiberinstallation zumeist auf Windows-Systemen direkt mit installieren. Dort können dann diverse Einstellungen an den Eingängen, das Signal-Routing (zumeist über einen virtuellen Mixer) und globale Settings wie Samplerate, Bitrate, Sample Buffer und dergleichen mehr eingestellt werden. Und genau das ist auch mit QJackctl möglich, wenngleich die Anwendung sich nicht ausschließlich um das Einbinden der Audio-Hardware in den Rechner kümmert.

Aber Halt! Hat der Berger nicht neulich in einer Folge Audio-Aufnahmen in Ardour ohne Einsatz von QJackctl gemacht? Ja, das ist richtig. Ardour kann via Preferences-Dialog direkt mit Jack kommunizieren und besitzt eine eigene Routing-Matrix, weshalb der Aufruf von QJackctl nicht nötig ist. Aber spätestens dann, wenn es darum geht MIDI einzusetzen oder andere Anwendungen wie etwa die Linux-Workstation ZynAddSubFX oder die Gitarren-Amp-Suite Rakarrak einzusetzen, die nur als Stand-alone-Programme verfügbar sind, ist auch bei Einsatz von Ardour die Mithilfe von QJackctl erforderlich. Zumindest ich habe es ums Verrecken nicht geschafft, solch ein virtuelles Instrument ohne QJackctl erfolgreich in Ardour einzubinden.

Genau das unterscheidet QJackctl nämlich von dem zuvor gemachten Vergleich mit den virtuellen Mixern von Audio-Interfaces. Denn das Frontend setzt ungleich breiter an und fungiert auch als Vermittlungs-Zentrale zwischen mehreren, gleichzeitig aktiven Anwendungen. Das wiederum erinnert an die von Steinberg und Propellerhead entwickelte Rewire-Schnittstelle auf Windows und Mac-Ebene. Jack und QJackctl ist übrigens nicht ausschließlich Linux-Anwendern vorbehalten. Wer mag, kann den Sound-Server mit seinem Frontend auch auf Mac und Windows-Systemen einsetzen, natürlich kostenfrei erhältlich und zwar auf www.jackaudio.org.
Doch genug jetzt mit dem ganzen einleitenden Rumgeschwafel. Lasst uns QJackctl endlich einsetzen.

Die Haupt-Oberfläche

QJack-Hauptfenster

Qjackctl ist ein Frontend zum Bedienen und Einstellen des im Hintergrund arbeitenden Jack-Servers.

Beim Start von QJackctl zeigt sich ein eher kleines rechteckiges Fenster, das aussieht wie die Transportleiste eines Sequenzers, also mit Start-, Stop-, Vorwärts-/Rückwärts-, Skip-Buttons, einer Reihe von Funktions-Buttons sowie einer Zeit-Anzeige. Wichtig sind die Start- und Stop-Buttons. Sie aktivieren respektive beenden den Betrieb des Jack-Servers. Wer im laufenden Jack-Betrieb auf den Beenden-Button klickt, beendet zwar die QJackctl-Anwendung, aber nicht den Jack-Server. Daher ist stets drauf zu achten, vor Beendigung von QJackctl zuerst den Stop-Button zu klicken, um, sofern gewünscht, den Jack-Server außer Betrieb zu nehmen und dann erst QJackctl zu beenden.

Der Einstellungen-Dialog

QJackctl Einstellungen

Über den Einstellungen-Dialog von QJackctl lässt sich unter vielem anderen der Treiber, Samplerate, Sample Buffer und natürlich auch das Audio-Interface inklusive Kanalzahl und Arbeits-Modus einstellen.

Damit QJackctl auch das tut, was von ihm erwartet wird, müssen wir auf Einstellungen klicken und im darauf erscheinenden Dialog eine Reihe von Einstellungen vornehmen.
Wichtig ist in der Zeile „Server Prefix“ die Angabe des Pfads zum Jack-Server, was aber von QJackctl zumindest bei mir von vorne herein schon richtig erkannt wurde. Rechts daneben muss per Ausklappliste bestimmt werden, über welchen Treiber die Hardware angesprochen werden soll. Bei USB-Interfaces muss Alsa, bei Firewire-Geräten FFADO/FreeBob gewählt werden. Ist dies geschehen, können wir im Parameter-Bereich mit den Einstellmöglichkeiten in der rechten Spalte weiter fortfahren. Die übrigen Spalten, wie auch die drei anderen Reiter (Optionen, Anzeige, Verschiedenes) interessieren uns zunächst nicht. In den Zeilen „Eingangs-“ und „Ausgabegerät“ muss jetzt das Interface ausgewählt werden, wobei sich eine Reihe kryptischer Einträge, beginnend mit dem Kürzel „hw:“ finden. Dankenswerterweise wurde aber das verwendete Audio-Interface, in meinem Fall die Rig Kontrol 3 von Native Instruments, korrekt bezeichnet, wenngleich ich zwei mehr oder weniger identische Einträge zur Auswahl hatte. Ich musste jedenfalls erst einmal ausprobieren, welcher der Einträge der richtige ist, was aber nur kurz dauerte. Ist der richtige Eintrag gewählt, lässt sich bestimmen, ob das Interface im Duplex-Betrieb oder nicht arbeiten soll. Es kann ja sein, dass es lediglich für die Aufnahme genutzt werden soll, während die Wiedergabe von einem anderen Gerät übernommen wird. Daher also die separate Wahlmöglichkeit für Ein- und Ausgabegerät. Im Duplex-Betrieb ist dies nicht nötig. In der Zeile „Kanäle I/O“ muss jetzt die Zahl der verfügbaren physikalischen Ein- und Ausgänge angegeben werden. Wer an einem Mehrkanal-Interface aus Übersichtsgründen die Zahl etwa der Eingänge begrenzen will, kann dies natürlich dort auch erledigen. Alle weiteren Einträge (Dither, In-/Output-Latency) lassen wir so wie sie sind. Fehlt jetzt nur noch die Angabe der zu verwendenden Samplerate und des Sample Buffers, was in der mittleren Spalte des Parameter-Dialogs geschieht. Letzteres wird über die Zeile „Frames/Periode“ eingestellt. In der Zeile MIDI-Treiber wählen wir den Eintrag „keiner“, was etwas verwirrend ist, schließlich wollen wir ja auch MIDI einsetzen. Das erläutere ich aber gleich noch, was dahinter steckt. Alles andere bleibt wiederum unberührt. Wer mag, kann die zuvor gemachten Einstellungen auch unter einer frei wählbaren Bezeichnung schließlich speichern, so dass diese Einstellungen künftig permanent bereitstehen. Danach reicht ein Klick auf OK und wir kehren wieder zurück zum Haupt-Dialog.

 

Der Verbinden-Dialog

QJack-Verbindungen-01

Der Verbindungen-Dialog funktioniert wie eine Patchbay, wobei Ein- und Ausgänge separat in Spalten aufgeteilt sind und via Klicken und Ziehen mit der Maus Verbindungen etabliert werden können. Hier zu sehen: Die beiden Eingänge des Audio-Interface (capture 1 und 2) sind alternierend auf die Spuren 1 bis 4 im Ardour-Sequenzer geroutet.

Richtig fruchtig wird’s jetzt nach Klick auf den Verbinden-Button. Der entsprechende Dialog zeigt zwei Spalten, eine für die Ein- (rechts), die andere für die Ausgänge (links), wobei der gleiche Dialog via Reiter separat für Audio- und MIDI-Verbindungen zur Verfügung steht. Verbindungen zwischen den Einträgen beider Spalten und somit Routings werden durch simples Klicken auf einen Eintrag in der einen Spalte mit anschließendem Ziehen auf das gewünschte Ziel in der anderen Spalte vorgenommen, wobei eine feine Linie zwischen den Spalten die Verbindung signalisiert. Das erinnert wiederum an die Bedienung des Effekt-Racks in Propellerheads Reason DAW.

Verwirrend sind jedoch die Spalten-Bezeichnungen, die hier eher umgekehrt vergeben werden müssten und aus der Perspektive der virtuellen Anwendungen (DAWs, Instrumente, Effekte) zu sehen sind. Denn die im „system“-Eintrag zusammengefassten Kanäle der Output-Spalte sind die Eingänge des Audio-Interface (capture1 und 2), die jetzt als virtuelle Ausgänge auf die virtuellen Eingänge geroutet werden müssen, etwa auf die ersten beiden Kanäle der Ardour-DAW. Klingt komisch, ist aber so. Die physikalischen Ausgänge werden in der Eingangs-Spalte innerhalb des system-Eintrags mit „playback“ bezeichnet.

Damit die Verwirrung aber nicht anhält, will ich jetzt einige Praxisbeispiele erläutern, bei dem ich drei Audio-Spuren (2x mono, 1x stereo) und eine MIDI-Spur nutzen möchte. Und zwar soll der ZynAddSubFX-Synthesizer sowohl per MIDI über ein Korg Nanokey 2, als auch via MIDI und Audio in Form der Stereo-Spur in Ardour eingebunden und aufgezeichnet werden. Die eingangs erwähnte Rakarrak-Gitarren-Amp-Suite soll auf den zweiten Audio-Eingangs-Kanal in mono geroutet werden und das Gitarrensignal bei der Aufnahme direkt mit den typischen Amp-Sounds veredelt werden. Alle drei Anwendungen – Ardour, ZynAddSubFX, Rakarrak – müssen logischerweise gleichzeitig gestartet sein, denn sonst zeigt der Verbinden-Dialog gar nichts. Der Nanokey2-Controller muss logischerweise ebenfalls angeschlossen sein und in Ardour die gewünschte Spurenzahl und -art angelegt sein.

Und jetzt alles hübsch der Reihe nach. Kümmern wir uns zuerst um die Audio-Verbindungen.

Erster Anwendungsfall: Audio vom Eingang auf die Ardour-Spur routen mit anschließender Ausgabe

Rakarrak

Rakarrak ist eine Stand-alone Gitarren-Amp-Simulation mit einer riesigen Palette an Effekt-Prozessoren und Einstellmöglichkeiten.

ZynAddSubFX

ZynAddSubFX ist quasi das Linux-Pendant zur Korg M1. Das multitimbrale Instrument hält eine breite Palette an sehr gut brauchbaren Brot-und-Butter-Sounds bereit sowie auch einige sehr atmosphärisch klingende Synth-Sounds.

Wir klicken auf den capture1-Eintrag und ziehen nach schräg oben auf den Audio1/audio_in 1-Eintrag. Damit ist der erste Kanal des Audio-Interface auf die Spur in Ardour geroutet, die mit „Audio 1“ bezeichnet wurde.
Damit das auf dieser Spur eingehende Signal auch zu hören ist, klicken wir in der linken Spalte innerhalb des Ardour-Eintrags auf Audio1/audio_out1 und ziehen schräg nach unten auf den Master/audio_in1-Eintrag und wiederholen das Ganze für den zweiten Stereo-Kanal. Damit ist jetzt die Audio1-Eingangsspur auf den Master-Stereo-Kanal von Ardour geroutet, wobei allerdings immer noch nichts zu hören ist. Daher müssen wir als dritten Schritt jetzt den Master/audio_out1 und 2 Eintrag in der linken Spalte mit den beiden playback-Einträgen auf der rechten Spalte verbinden. Et Voilà: Über den ersten Eingangs-Kanal des Audio-Interface wird die dort angeschlossene Gitarre clean in Ardour eingespeist, dort aufgezeichnet und auch hörbar wiedergegeben.

Zweiter Anwendungsfall: Routen externer Effekt-Prozessoren in den Eingangs-Kanalpfad zwecks Aufnahme mit Effekt

QJack-Verbindungen-02-Rakarrak

Die Rakarrak-Effekt-Suite ist hier zwischen die Audio-Interface-Eingänge und die ersten beiden Spuren der Ardour-DAW geroutet, so dass der Rakarrak-Effekt direkt mit aufgenommen wird.

Nur cleane Gitarren sind natürlich auf Dauer zu dröge. Also packen wir jetzt die Gitarren-Amp-Suite Rakarrak zwischen die physikalischen Eingänge und die Aufnahmespur in Ardour.
Dazu gehen wir wie folgt vor: Wir ziehen auf der linken Spalte vom capture-Eintrag rüber auf den in-Eintrag von Rakarrak auf der rechten Seite. Hinweis: Rakarrak ist eine Stereo-Anwendung und besitzt also zwei Ein- und Ausgänge. Wer mag, kann also nur einen Eingang nutzen, es ist aber auch möglich, einen capture-Eingang simultan auf beide Rakarrak-Eingänge zu routen. In der Abbildung haben wir jetzt beide capture-Eingänge auf je einen Rakarrak-Eingang geroutet. Damit ist jetzt der physikalische Eingang des Interface in die Amp-Simulation geroutet. Als nächstes müssen wir den Ausgang von Rakarrak auf die Eingangsspur von Ardour routen. Dazu einfach die beiden out-Einträge in der linken Spalte mit den audio_in-Kanälen von Ardour auf der rechten Seite verbinden. Das Ausgangs-Routing wie im ersten Anwendungsfall beschrieben, erfolgt auf die gleiche Art (Ardour audio_outs in der linken Spalte mit den Master-Eingängen in der rechten Spalte verbinden). Und schwupps: wir nehmen unsere Gitarre mit saftiger Verzerrung plus U2-typischen Echos und dark-wavigen Flangings auf.

 

Dritter Anwendungsfall: Routen externer Synthesizer in Ardour inklusive Aufnahme von MIDI- und Audiosignalen

Qjack-Verbindungen-Zynadd-Audio

Die beiden Kanäle des ZynAddSubFX Synthesizers sind in diesem Schaubild auf die beiden Stereokanäle der Audio3-Spur geroutet.

Das Einbinden des ZynAddSubFX-Synthesizers erfordert ein wenig mehr Aufwand, da auch MIDI-Verbindungen erstellt werden müssen. Doch zuvor etablieren wir erst einmal die Audio-Verbindungen, was ähnlich einfach geschieht wie zuvor beschrieben. Also im Audio-Reiter je einen ZynAdd-Ausgang von der linken Spalte auf je einen der audio_in-Eingänge des dritten (Stereo-)Kanals von Ardour auf der rechten Spalte verbinden. Die beiden Audio3/audio_out-Kanäle der linken Spalte wiederum mit je einem Master-Kanal in der rechten Spalte verbinden. Fertig.

Als nächstes rufen wir den Jack-MIDI Reiter auf und sehen dort MIDI-Anschlüsse von Ardour und Rakarrak, nicht aber von unserem angeschlossenen Korg Nanokey2 und auch nicht vom ZynAddSubFX. Beides sehen wir nach Aufruf des Alsa-MIDI-Reiters zusammen mit weiteren MIDI-Ports des Rig Kontrol3-Interface. Doch das Verbinden des Nanokey2 mit dem ZynAddSubFX auf dieser Seite führt zu keinem Erfolg, denn Ardour bleibt ja außen vor. Wie also nun die beiden Welten – Jack-MIDI und Alsa-MIDI – in Kontakt treten lassen?

a2jmidid-e

Über das kleine Programm „Alsa to Jack MIDI demon“ erscheint die MIDI-Hardware, die sonst nur auf Alsa-Ebene ansprechbar ist, auch im Jack-MIDI Bereich, so dass Hardware-Controller und Instrumente auch in Ardour eingebunden werden können.

Nach ein wenig Recherche im Netz und auch in der Bedienungsanleitung von Ardour stoße ich auf ein kleines Progrämmchen, das diesen Job erledigt und „Alsa to Jack MIDI Bridge“ heißt. Dazu müssen wir uns das Programm aber erst einmal installieren, was denkbar einfach über den Ubuntu-Software-Manager geschieht. Nach Aufruf im Suchen-Feld einfach die Zeichenfolge „a2jmidid“ eingeben und schon zeigt sich der Eintrag plus entsprechendem Installations-Button. Ist dies geschehen, müssen wir das Terminal-Fenster aufrufen, was über die versteckte Menüleiste am Fuß des Bildschirms bequem erreichbar ist. Ist das Fenster geöffnet geben wir ganz lapidar die Zeichenfolge „a2jmidid -e“ ein (natürlich ohne Anführungszeichen) und schon etabliert der Rechner im Hintergrund eine Verbindung zwischen Jack und Alsa auf MIDI-Ebene.

Qjack-Verbindungen-Zyn-Nano-MIDI

Das Korg Nanokey2 schickt seine Daten simultan an die MIDI-Spur in Ardour und an ZynAddSubFX. Ardour sendet seinerseits die aufgezeichneten MIDI-Daten via midi_out 1 an den Synthesizer.

Als Konsequenz zeigt sich anschließend im Jack-MIDI-Fenster des Verbindungen-Dialogs ein neuer „a2j“ betitelter Eintrag, der die zuvor noch fehlenden MIDI-Anschlüsse, also von ZynAdddSubFX und vom Nanokey2-Controller besitzt. Somit kann die virtuelle Verkabelungs-Session fröhlich fortgesetzt werden. Hinweis: ZynAddSub-FX kann lediglich MIDI-Daten empfangen, aber nicht ausgeben. Daher müssen wir das Nanokey2 parallel sowohl mit der MIDI_in 1-Spur von Ardour, als auch mit dem Stand-alone-Synthesizer verbinden. Nächster Schritt: Um die in Ardour aufgezeichneten MIDI-Daten schließlich auch an ZynAddSubFX schicken zu können, stellen wir noch eine dritte Verbindung her und zwar vom MIDI-out 1 Eintrag in der linken Spalte hinüber zum ZynAddSubFX-Eintrag auf der rechten.
Jetzt können wir die MIDI-Spur in Ardour scharf stellen und via Nanokey2 Melodien, Akkorde und Sequenzen nach Lust und Laune aufnehmen. Das Aufgenommene wird bei der Wiedergabe anschließend klaglos vom ZynAddSubFX empfangen und in Form von Audio ausgegeben. Hinweis: In unserem Szenario haben wir die Audio-Ausgänge des Synths auf die Stereo-Spur geroutet. Um also etwas hören zu können, muss dort das Direct Monitoring aktiv sein. Wer mag, kann auch gleichzeitig zur MIDI-Aufnahme auch eine Audio-Aufnahme erstellen. Wer dies nicht möchte, kann den ZynAddSubFX auch direkt mit den playback-Ausgängen verbinden und umgeht den Audio-Pfad über Ardour.

Ganz wichtig: Werden sämtliche hier vorgestellten und eingesetzten Anwendungen beendet, sind auch die zuvor im Verbindungen-Fenster gemachten Routings futsch. Ardour und die anderen Anwendungen speichern lediglich die Daten im Projekt, die innerhalb der eigenen Anwendung erzeugt wurden. Doch dafür hat QJackctl bestens vorgesorgt. Durch Klick auf den „Sitzung…“-Button öffnet sich ein Datei-Manager-Fenster in dem sich nicht nur die Routings, sondern auch die daran beteiligten Programme erfassen und abspeichern lassen. Das Laden des Sitzungs-Files sorgt anschließend automatisch für das Laden aller Programme und das Etablieren der zuvor gemachten Routings. So einfach geht das.

Insgesamt betrachtet ist der Umgang mit QJackctl anfangs schon gewöhnungsbedürftig. Hat man sich aber einmal an die kryptischen Bezeichnungen und das Prozedere gewöhnt, geht es doch recht flott über die Bühne. Mehr noch wird die Mächtigkeit dieser Anwendung von Mal zu Mal immer deutlicher und wenn man souverän damit umgeht, sind Routing-Szenarien möglich, die weit über das gehen, was ASIO/Core Audio und Rewire bieten.

Einzig das zusätzliche Installieren und Laden der Alsa-to-Jack MIDI-Bridge ist ein Stolperstein, der mich doch einiges an Zeit und Nerven gekostet hat, bis ich das gewünschte Ergebnis realisiert hatte. Schön wäre daher, wenn dieses Mini-Progrämmchen sich von vorne herein zusammen mit QJackctl, meinetwegen auch als zusätzliche schaltbare Option, laden würde. OK, zur Ehrenrettung sei vermerkt, dass dies jetzt bei der Arbeit mit Ardour erforderlich ist. Wie das bei anderen Sequenzern/DAWs aussieht, ob das auch ohne Zutun dieser Anwendung direkt geht, kann ich (noch) nicht ermessen, weshalb ich das jetzt nicht per se verurteilen will. Jedenfalls bin ich jetzt ein großes Stück weiter gekommen und kann jetzt Audio- und MIDI-Aufnahmen in Ardour anfertigen, sie mit Effekten – intern via LV2-Schnittstelle oder extern – versehen und wie in allen anderen DAWs auf Windows- und Mac-Ebene bearbeiten, abmischen und rendern.