Gitarrenverstärker unter Linux mit Guitarix

GuitarixDas Spiel „Guitar Hero“ hatte mich damals motiviert, zur echten e-Gitarre zu greifen. Leider ist das autonome Erlernen eines Instrumentes sehr schwierig, die Lernkurve war entsprechend niedrig, so wie auch irgendwann die Motivation.

Dies hat sich mit dem Erscheinen des Computerspiels Rocksmith für PC aber schlagartig geändert. Dem Spiel liegt ein USB-Kabel zum Anschließen der eigenen, echten e-Gitarre an den PC bei. Diese wird damit zum Spielecontroller, Spielen mit der Gitarre wird dann praktisch wie Guitar Hero, nur in echt.

Leider kann man in dem Spiel aber nur die enthaltenen Songs spielen.
Mit Programmen wie dem quelloffenen Tuxguitar, das Tabulaturen anzeigt und auch vorspielen kann, ist das anders.
Einziger Nachteil: man kann die e-Gitarre nicht ohne weiteres über Kopfhörer hören, wie es unter Rocksmith der Fall ist.

Abhilfe muss also her, und zwar in der Form einer Gitarren-Emulator-Software, wie es Rocksmith ja auch ist.
Unter Linux erledigt das ganz hervorragend die ebenfalls quelloffene Software guitarix.

Selection_017Zum Glück hat es Ubisoft „richtig“ gemacht und ein Kabel gebaut, das eine einfache USB-Soundkarte mit einem Eingang darstellt und auch unter Linux funktioniert.

Interessanter Fakt am Rande: unter Linux ist die Soundwiedergabe absolut Latenzlos – ich zupfe und im gleichen Moment schallt es aus den Lautsprechern. Rocksmith dagegen hat eine deutliche Latenz vom 20-100ms. Das zeigt, daß nicht das Kabel minderwertig ist wie in manchen Blogs geschrieben, sondern das Spiel selbst – schade.

Das Zusammenspiel der benötigten Komponenten wie Treibern, Guitarix und JACK einzurichten ist nicht ganz trivial.

Ich beschreibe daher, wie ich es gemacht habe 🙂

Die benötigte Software

Treiber

Selection_018Das Kabel ist ein normales USB Audiodevice, dessen Treiber eigentlich allen Distributionen beiliegen sollte.
Unter Gentoo verwende ich selbstgebaute Kernel, dort muss es daher aktiviert sein.

Guitarix

Offensichtlich benötigen wir guitarix. Ist es nicht bei der eigenen Distribution dabei (so wie bei mir bei Gentoo) muss es von Hand installiert werden.
Dazu braucht man ggfs. ein paar Entwicklertools wie beispielsweise waf, deren Installation beschreibe ich hier aber nicht.

Die Installation ist einfach und auf Sourceforge näher beschrieben:

cd guitarix_source_directory
./waf configure
./waf build
./waf install

JACK

Guitarix benötigt zur Audioverarbeitung den Audiorouter JACK. Dieser sollte bei jeder Distribution erhältlich sein.

JACK Audio Connection Kit [(voreingestellt)] Steht._016Um Jack komfortabel zu starten und verwalten, verwenden wir das JACK Audio Connection Kit qjackctl. Dieses Tool stellt uns alle Möglichkeiten zur Verfügung, um JACK so zu konfigurieren, wie wir es brauchen.

Bevor wir JACK aber starten können, müssen wir das Gitarrenkabel verfügbar machen.

Das Gitarren-Kabel für JACK verfügbar machen

Ich hatte das Problem, dass JACK nicht alle Sounddevices sehen konnte, es waren nur die Geräte der internen Soundkarte verfügbar.
Mit dem Kommando alsa_in kann man aber zusätzliche Geräte an JACK anmelden.
Dazu muss man nur wissen, wie sie bei ALSA heißen, dies bekommt man mit den Kommandos aplay für Wiedergabegeräte und, in unserem Fall, mit arecord heraus:

~ # arecord -l
**** Liste der Hardware-Geräte (CAPTURE) ****
Karte 0: Intel [HDA Intel], Gerät 0: ALC269VB Analog [ALC269VB Analog]
  Sub-Geräte: 1/1
  Sub-Gerät #0: subdevice #0
Karte 1: Adapter [Rocksmith USB Guitar Adapter], Gerät 0: USB Audio [USB Audio]
  Sub-Geräte: 1/1
  Sub-Gerät #0: subdevice #0

Hier sieht man: Karte 0 ist meine interne Soundkarte, Karte 1 das USB-Kabel – es meldet sich mit Rocksmith USB Guitar Adapter.

Nun machen wir das Gerät bei JACK bekannt mit dem Kommando alsa_in:

~ $ alsa_in -j Gitarre -d hw:1 -q 1

Die Option -j gibt dabei den Namen an, unter dem das Gerät bei JACK ansprechbar sein soll, -d gibt das Device an, das genutzt werden soll, hier ist das hw:1, also „Hardware 1“ (die 1 haben wir mit arecord -l ermittelt), und das -q 1 bestimmt die Qualität der Sample Rates; 1 ist dabei recht niedrig, verringert aber die Latenz. Wessen Rechner schnell genug ist, kann hier auch bis auf 4 erhöhen.

Bekommt man einen Fehler wie Capture open error: Device or resource busy muss man herausfinden, welche Programme das Device bereits belegen.
Nützliche Kommandos sind hier:

~ $ lsof +c 0 /dev/snd/pcm*

oder

~ $ lsof +c 0 /dev/snd/seq

Der tatsächliche Ort der Devices hängt aber ggfs. vom eigenen System ab.

Ein Fall bei mir:

~ $ lsof +c 0 /dev/snd/pcm*
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
alsa_in 6568 thomas mem CHR 116,9 17506 /dev/snd/pcmC1D0c
alsa_in 6568 thomas 6u CHR 116,9 0t0 17506 /dev/snd/pcmC1D0c

Hier liefen schon alsa_in aus vorigen Versuchen.

Die kann man einfach abschiessen:

~ $ killall -9 alsa_in

Einstellungen - JACK Audio Connection Kit_014Für etwas Komfort kann man sich das Kommando von qjackctl direkt starten lassen. Dies erreicht man in den Einstellungen unter dem Tab Optionen.


Die Kommandos sind:

alsa_in -j Gitarre -dhw:1 -q 1 2>&1 1> /dev/null & echo $! > ~/.alsa_in.pid

Bei Erfolgreichem Start wird die versteckte Datei .alsa_in.pid im eigenen Homeverzeichnis erzeugt, die die PID des eben gestarteten Prozesses beinhaltet.

Zum Beenden nutzen wir folgendes Kommando:

kill `cat ~/.alsa_in.pid`; rm ~/.alsa_in.pid

Einrichtung der Verbindungen in Jack

Als nächstes müssen wir JACK sagen, wie die einzelnen Geräte ineinandergreifen sollen.
Dies können wir recht einfach mit dem Button Verbinden… erreichen – nur sind diese Angaben nicht von Dauer, beim nächsten Starten müsste man es nochmal machen. Etwas mehr Aufwand, aber persistent, sind die Einstellungen über das Steckfeld, zu erreichen über den gleichnamigen Button.
Öffnet man das Steckfeld, sieht man links die Ausgänge und rechts die Eingänge mit jeweils einer Leiste Buttons.

Anbindung Ausgang GitarreZuerst legen wir uns den Ausgang an, der den Ton der Gitarre wiedergibt. Als Name wählen wir etwas geeignetes, in meinem Beispiel wird der Ausgang „Gitarre Ausgang“ heißen. Dieser Name wird dann weiter von JACK referenziert. Im Feld Client sind alle Ausgänge wählbar, die JACK kennt. Hier können wir nun auch den Ausgang „Gitarre“ wählen – dies ist der Name, den wir vorhin mit dem Kommando alsa_in bestimmt haben. Ist der Client gewählt, kann man den gewünschten Ausgang wählen. Die Gitarre ist mono, also gibt es dort auch nur einen. Dann auf Anschluss hinzufügen und OK.

Anbindung Eingang VerstaerkerAuf die gleiche Weise gehen wir nun auf der rechten Seite des Steckfelds vor und erzeugen einen Eingang. Die Gitarrensounds sind noch unverstärkt, also stecken wir es in den Verstärker von Guitarix. Der Client heißt gx_head_amp, auch hier gibt es wieder nur einen Kanal.

Verbinden Gitarre mit VerstaerkerNun müssen wir den Ausgang mit dem eben erzeugten Eingang verbinden. Hierzu wird der gewünschte Ausgang in der linken Spalte gewählt, der Eingang in der rechten und der Button Verbinden geklickt (in meinem Beispielbild ist der Button grau, da die Verbindung schon steht). Es erscheint eine dünne schwarze Linie zwischen den Beiden, die die Verbindung signalisiert.

Anbindung Ausgang VerstaerkerAls nächstes muss der Verstärker mit dem verbinden, wofür wir das Ganze eigentlich veranstalten: das Effektgerät von Guitarix!
Also erzeugen wir einen Ausgang des Verstärkers, der Client heißt auch hier wieder gx_head_amp,

Anbindung Eingang Effekteeinen Eingang für die Effekte,

Verbinden Verstaerker mit Effektenund verbinden die Beiden.

Anbindung Ausgang EffekteAls Letztes muss das vom Effektgerät erzeugte Signal noch ausgegeben werden. Zu beachten ist hier nur, dass die Effekte in Stereo ausgegeben werden, also zwei Ausgänge existieren – es muss hier also der Anschuss hinzufügen Button zwei Mal geklickt werden.

Playback - Eingang Anbindung_010Für diese Ausgänge brauchen wir nun die passenden Eingänge, die die tatsächliche Wiedergabe übernehmen, der Client heißt wenig überraschend system und die Anschlüsse playback_*.

Verbinden Effekte mit PlaybackIst der Eingang erzeugt, können die beiden verbunden werden.

JACK VerbindungenWird das Fenster Verbindungen… aufgerufen, werden die eben erstellten Steckbrett-Verbindungen auch dargestellt.
Damit sind alle nötigen Verbindungen erstellt. Man sollte nicht vergessen, das Steckbrett noch zu speichern und natürlich auch zu aktivieren.

JACK Audio Connection Kit [(voreingestellt)] Läuft._015Ein Klick auf den Button Starten startet nun schliesslich JACK und sollte ohne Fehler ablaufen.

Guitarix starten

Guitarix im EinsatzIst JACK gestartet, können wir nun Guitarix aufrufen.
Spätestens jetzt sollte, wenn man an den Saiten zupft, etwas zu hören sein.

15 Gedanken zu „Gitarrenverstärker unter Linux mit Guitarix

  1. Hört sich kompliziert an. Werde es aber in den nächsten Tagen ausprobieren. Gut, dass Du diese Anleitung erstellt hast. Vielen Dank dafür.

  2. hey
    also irgendwie klapt das nich bei mir so recht
    wenn du eigene disbos basteln kannst
    kannst dann vieleicht sowas wie GNUGuitarINUX bauen
    am besten installierbar
    Grüße

  3. Also ich verwende AV Linux weil es ja grad für solche Sachen gemacht ist und z.b. nen drumcomputer Aufnahme Möglichkeit usw hat
    Bei mir scheitert es schon am aplay Befehl wenn ichbin in der Konsole eingeb die Scheit irgendwie tot zu sein
    Will das rocksmith kabel verwenden weil ich damit weniger Störungen als analoge hab
    Grüße aus dem sonnigen algau

  4. Was genau kommt denn, wenn Du den Befehl eingibst – Fehlermeldungen sind ja oft hilfreich 🙂

    Gruß übrigens aus Kaufbeuren 😉

  5. Dann passirt einfach gar nix
    Die console ist tot
    Ich hab bei dem Linux 3 consolen
    Eine in rot eine normal in schwarz und eine weiß ( sorry weis nicht wie ich es sonst beschreiben soll) Hab es auch schon unter root versucht
    Gleiches Spiel

  6. Herzlichen Dank für diese Anleitung, es funktioniert auch unter Linux Mint 16 (Cinnamon). Die beiden Programme (qjackctl und guitarix) können hier bequem über die Softwareverwaltung bezogen werden.
    Die Latenz geht absolut in Ordnung, auf meiner Maschine (Dell XPS 13 Ultrabook) steht sie standardmäßig auf 1024, kann aber ohne Artefakte bis auf 128 heruntergehen.
    Ein Hinweis noch, bevor ich zu meinen Fragen komme:
    Beim Einrichten der Ein- und Ausgänge sollte Guitarix schon laufen, da sonst die entsprechenden Clients nicht ausgewählt werden können (es ist hier immer nur System zu sehen).
    Nun zu meinen Fragen.
    1. Wie kann ich die Latenz „Speichern“, so dass ich beim Start von Guitarix nicht immer erst von 1024 auf 128 herunterregeln muss?
    2. Wie kann ich z.b. Banshee zur gleichzeitigen Wiedergabe von MP3-Dateien einrichten, wenn ich gerade Gitarre spiele?

    Vielen Dank nochmals, Sascha

  7. Hi,

    ich probiere gerade die Anleitung aus. Allerdings bekomme ich keine Ausgabe hin. Ich nutze zur Zeit Ubuntu 14.04. Bin mir nicht sicher, ob sich da von den Treibern her so viel verändert hat?
    arecord -l :
    Karte 2: Adapter [Rocksmith USB Guitar Adapter], Gerät 0: USB Audio [USB Audio]
    Sub-Geräte: 1/1
    Sub-Gerät #0: subdevice #0

    Allerdings passiert nichts, wenn ich den darauf folgenden Befehl nutzen will…
    alsa in -j Gitarre -d hw:2 -q1
    Usage: /sbin/alsa {unload|reload|force-unload|force-reload|suspend|resume}
    —-
    Keine Ahnung, was mir das sagen soll. Anscheinend nutze ich wohl Pulse, anstatt ALSA?

  8. Soorrrryy… der befehl lautet anscheinend alsa_in und nicht alsa in … jetzt bekomme ich eine Ausgabe:
    alsa_in -j Gitarre -d hw:2 -q4
    Cannot connect to server socket err = No such file or directory
    Cannot connect to server request channel
    jackdmp 1.9.10
    Copyright 2001-2005 Paul Davis and others.
    Copyright 2004-2013 Grame.
    jackdmp comes with ABSOLUTELY NO WARRANTY
    This is free software, and you are welcome to redistribute it
    under certain conditions; see the file COPYING for details
    no message buffer overruns
    no message buffer overruns
    no message buffer overruns
    JACK server starting in realtime mode with priority 10
    audio_reservation_init
    Acquire audio card Audio0
    creating alsa driver … hw:0|hw:0|1024|2|44100|0|0|nomon|swmeter|-|32bit
    configuring for 44100Hz, period = 1024 frames (23.2 ms), buffer = 2 periods
    ALSA: final selected sample format for capture: 32bit integer little-endian
    ALSA: use 2 periods for capture
    ALSA: final selected sample format for playback: 32bit integer little-endian
    ALSA: use 2 periods for playback
    WARNING: chennel count does not match (requested 2 got 1)
    selected sample format: 16bit
    delay = 4142
    delay = 2184
    delay = 2222
    delay = 2280
    delay = 2274
    ….
    Muss ich das abwarten oder kann ich das beenden?

  9. „Ich mach das allerdings mittlerweile alles mit Rocksmith 2014“
    Schön und gut 🙂 auf diese Weise bin ich auch an mein Kabel gekommen :)-allerdings nutze ich hauptsächlich ein Linux-System und für zwischendurch ist so eine Lösung sicher nicht verkehrt.

  10. Vielen Dank erstmal für die Einführung!
    Ich habe das ganze jetzt über KXStudio realisiert und den Sound und alles zum Laufen gebracht. Nur ist es mir noch nicht möglich, die Gitarre über den Rocksmith-Adapter an Guitarix anzuschließen. Ich hab letzlich das selbe Problem, wie „Sebastian“, ein paar Posts weiter oben.
    Dies liegt (vermutlich) daran, dass der Adapter, genau wie die JACK-Bridge von ALSA -> Loop -> JACK als Gerät:0 (bei arecord -l) angegeben wird.
    Daher bekommt man wohl auch die Fehlermeldung:
    „WARNING: chennel count does not match (requested 2 got 1)“
    D.h. der Adapter wird schienbar nicht als eigenes Gerät erkannt…
    Kann man da irgendwas machen?
    Vielen Dank im Voraus,
    Grüße Robin

  11. Okey Blödsinn, ich meine natürlich die Karte und nicht das Gerät…

    Liebe Grüße

  12. Vielen Dank für die Anleitung!
    Hat bei mir auf Anhieb geklappt unter OpenSuse 13.2. War alles in den Repos dabei.
    Alleine hätte ich die Einstellungen nie hinbekommen.
    LG

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*