ALSA-Sequenzer

Der ALSA-Sequenzer ist ein Modul des Linux-Soundsystems ALSA. Wenn du irgendetwas mit MIDI-Instrumenten, z. B. mit Keyboards oder mit E-Pianos, am Computer machen möchtest, dann ist der ALSA-Sequenzer der richtige Einstiegspunkt. Auch dann wenn du MIDI-Dateien über ein Keyboard abspielen möchtest, dann ist der ALSA-Sequenzer mit von der Parie oder umgekehrt, wenn du Musik am Keyboard einspielst und über einen Software-Synthesizer ausgeben möchtest, dann kannst du dafür den ALSA-Sequenzer verwenden.

Wenn du überhaupt keine Ahnung von MIDI hast, dann empfehle ich, zunächst eine Einführung zu lesen.

Dabei ist der ALSA-Sequenzer kein Sequenzer im eigentlichen Sinn, d. h. seine Aufgabe ist nicht, MIDI-Dateien aufzunehmen und abzuspielen. Vielmehr ist der ALSA-Sequenzer eine Komponente, die verschiedene andere Hardware- und Software-Komponenten miteinander verbindet. Der ALSA-Sequenzer ist eher eine Art Patchbay für MIDI-Geräte und MIDI-Software.

Zwar kommt der ALSA-Sequenzer ganz ohne MIDI-Hardware aus, doch ist er für Musiker maximal nützlich, wenn MIDI-Hardware z. B. ein Keyboard, ein Expander oder ein Synthesizer vorhanden ist.

Das folgende Diagramm zeigt Komponenten, die alle am ALSA-Sequenzer andocken können.



Die roten Komponenten stehen hier für real existierende MIDI-Hardware (im Beispiel ein Keyboard und ein Expander). Die grünen Komponenten sind reine Software-Applikationen. Beide Arten von Komponenten werden im ALSA-Jargon als Client bezeichnet.

Die Pfeile bezeichnen den Datenfluss von einer Komponenten zum ALSA-Sequenzer oder umgekehrt. Die Pfeile repräsentieren einen sogenannten Port im Client. Jeder Client kann einen oder mehrere Ports haben. Ports können unidirektional oder bidirektional sein.

Das Keyboard hat einen bidirektionalen Port, weil das eingebaute Manual MIDI-Daten an den ALSA-Sequenzer schicken kann. Gleichzeitig können die eingebauten Tongeneratoren MIDI-Daten vom ALSA-Sequenzer entgegennehmen und daraus Töne erzeugen. Der Expander hingegen hat kein Manual, daher kann er nur MIDI-Daten vom ALSA-Sequenzer entgegennehmen und der Port ist unidirektional.

Die im Diagramm gezeigte Filter-Applikation hat zwei unidirektionale Ports. Über einen nimmt sie MIDI-Daten entgegen, über den zweiten schickt sie MIDI-Daten fort. Der Sinn einer solchen Filter-Applikation ist es, die einkommenden MIDI-Daten zu bearbeiten. So kann z. B. die Anschlagsdynamik manipuliert werden und geändert wieder herausgeschickt werden. Oder man könnte z. B. auch MIDI-Daten ganz oder teilweise auf einen anderen Kanal umsetzten.

Verwendung eines Master-Keyboards

In folgendem Beispiel möchte ich zunächst zeige, wie man ein Keyboard verwendet, um einen Softwaresynthesizer anzusteuern.

Ich verwende dazu gerne den freien Software-Synthesizer Qsynth. Tatsächlich handelt es sich nur um eine einfache und bequeme Benutzeroberfläche, um den ebenfalls freien Fluidsynth anzusteuern, Wenn du Qsynth aus den Paketquellen installierst, dann wird Fluidsynth automatisch mit installiert, so dass du gleich ein voll funktionsfähigen Software-Synthesizer hast.

Als Master-Keyboard verwende ich ein Kawai ES6 Digital Piano. Dieses verbinde ich über USB an den PC und starte dann Qsynth.



Und tatsächlich: wenn ich auf dem Keyboard spiele, dann gibt der PC die entsprechenden Töne von sich.

Offensichtlich reicht es, das Digital Piano anzuschließen und den Qsynth zu starten, um das gewünschte Ergebnis zu erhalten.

Aber was passiert hier?

Das sieht man gut mit dem Kommandozeilen-Tool aconnect. Diese gehört zu ALSA dazu und ist auf sollte Teil von jeder LINUX-Distribution sein, die auf ALSA setzt. Ich rufe das Tool mit der Option -l auf, um die Verbindungsliste anzusehen.

$aconnect -l
client 0: 'System' [type=kernel]
    0 'Timer           '
	Connecting To: 142:0
    1 'Announce        '
	Connecting To: 142:0, 128:0
client 14: 'Midi Through' [type=kernel]
    0 'Midi Through Port-0'
	Connecting To: 128:0
client 24: 'USB-MIDI' [type=kernel,card=2]
    0 'USB-MIDI MIDI 1 '
	Connecting To: 128:0
client 128: 'FLUID Synth (Qsynth1)' [type=user,pid=3781]
    0 'Synth input port (Qsynth1:0)'
	Connected From: 0:1, 14:0, 24:0
client 142: 'PipeWire-System' [type=user,pid=2455]
    0 'input           '
	Connected From: 0:1, 0:0
client 143: 'PipeWire-RT-Event' [type=user,pid=2455]
    0 'input           '

Wenn ich will, dann kann ich die Verbindung trennen:

$ aconnect -d 24:0 128:0

Das Digital Piano steuert nun nicht mehr den Software-Synthesizer. Es ist kein Ton zu hören. Ich kann sie so wieder herstellen:

$ aconnect 24:0 128:0

Alles, was ich dazu wissen muss, sind die Client-Nummern und die Port-Nummern, die ich aus obiger Liste ablesen kann.

Im Übrigen muss es nicht sein, dass Digital Piano und Qsynth automatisch miteinander verbunden sind. Dieses Verhalten kann man nämlich in den Einstellungen von Qsynth an- und ausschalten. Wenn ich in den Einstellungen den Eintrag “Auto Connect MIDI Inputs” angehakt habe, dann passiert das so wie beschrieben. Wenn ich den Eintrag abhake, dann muss ich die Verbindung manuell mit dem Tool aconnect (oder mit anderen geeigneten Tools) herstellen.

Aufnahme von einem MIDI-Keyboard

Gelegentlich möchte ich Musik auf einem Keyboard einspielen und in eine MIDI-Datei speichern. Dafür bietet ALSA eine einfaches Kommandozeilen-Tool an. Es heißt arecordmidi. Es verbindet sich zu einem angegebenen Port des ALSA-Sequenzers und schreibt die empfangenen Daten in eine MIDI-Datei.

Wenn mein Port 24:0 ist (wie in obigen Beispiel, wenn ich mein Digital Piano anschließe) dann lautet der Befehl zur Aufnahme einfach so:

$ arecordmidi -p 24:0 meine-midi-aufnahme.mid

Die Aufnahme wird beendet, indem ich das Programm mit Tastendruck STRG+C abbreche.

Die Aufnahme kann auch parallel zu einem Software-Synthesizer laufen. Die folgende Zeichnung verdeutlicht die Verbindungen, die dann im ALSA-Sequenzer vorhanden sind.



Abspielen über einem MIDI-Keyboard

Genau so wie für die Aufnahme von MIDI-Dateien hat ALSA auch eine Tool zum Abspielen von MIDI-Dateien an Bord. Es heißt aplaymidi und lässt sich über Kommandozeile genau so wie arecordmidi verwenden.

$ aplaymidi -p 24:0 meine-midi-aufnahme.mid

Mit dem Befehl spielt das Keyboard dann die MIDI-Datei meine-midi-aufnahme.mid wieder ab (oder natürlich auch jede beliebige andere MIDI-Datei.)

Natürlich kann man arecordmidi und aplaymidi gleichzeitig verwenden. Das ist dann eine maximal einfache Methode, um mehrere Spuren eines Musikstücks aufzunehmen.

Siehe auch: Details zur Programmierung des ALSA-Sequenzers