4.3.3. Midi Input und Output in Echtzeit
Echtzeit Ein- Ausgabe von Midiereignissen wird über Streams und Ports abgewickelt6:
In incudine werden dafür die Klassen jackmidi:output-stream
bzw. jackmidi:input-stream
bereitgestellt. Es handelt sich dabei
um direkte Assoziationen eines Streams mit einem in Jack sichtbaren Port.
In common music existieren zwei vordefinierte Symbole, *midi-out1*
bzw. *midi-in1*
, die als Standardports für die elementare Midi-Anbindung vorgesehen sind.
Funktionen zum Öffnen und Schließen der Standardports:
;;; Öffnen des Standard Output Streams (gebunden an das Symbol *midi-out1*): (midi-open-default :direction :output) ;;; Öffnen des Standard Input Streams (gebunden an das Symbol *midi-in1*): (midi-open-default :direction :input)
Nach Evaluation dieser Funktionen sollten bei jack unter JACK-MIDI bei input und output jeweils ein Eintrag mit Namen "incudine" erscheinen.
Hinweis: Bei Laden des Pakets "cm-all" mit dem Befehl ql:quickload "cm-all")
werden automatisch die Midi In- und Output Streams geöffnet.
Ein Aufklappen dieser Einträge zeigt, dass der Name der Midi Ports "midiout-1" bzw. "midi_in-1" ist. Wie man erkennen kann, ist dieser Name _nicht identisch mit den Symbolen dieser Ports in Common Music (*midi-out1*
bzw. *midi-in1*
).
Anschließend muss in jack (mit Hilfe von QjackCtl oder JackPilot) der Midi Output von incudine mit dem Midi input des Softwaresynthesizers verbunden werden, damit man auch etwas hören kann.
![]() |
---|
Anschließend sollte die Evaluation des folgenden Ausdrucks einen Ton erzeugen:
(output (new midi) :to *midi-out1*)
Neue Streams/Ports werden mit der Funktion jackmidi:open
erzeugt. Der Rückgabewert der Funktion sollte dabei an ein Symbol gebunden werden, das benötigt wird, wenn man Midiereignisse über diesen Stream ausgeben möchte:
(defparameter *midi-out2* nil) (setf *midi-out2* (jackmidi:open :direction :output :port-name "midi_out-2"))
Nach der Evaluation sollte in JACK-MIDI ein zweiter Port mit Namen "midi_out-2" zu sehen sein.
![]() |
---|
Wenn dieser Port mit einem Softwaresynthesizer verbunden wird (wie in der Abildung dargestellt), kann man die Ausgabe auf diesen Stream/Port in common musics output
Funktion durch das Keywort :to
spezifizieren:
(output (new midi) :to *midi-out2*)
6: Es ist schwierig, eine genaue Unterscheidung von Stream und Port zu treffen. Konzeptionell versteht man unter einem Port am ehesten etwas, das einem Hardwareanschluss, wie einer Kopfhörerbuchse entspricht, während ein Stream als geöffnete Verbindung betrachtet wird, über die Daten an den Port übertragen werden. Im Zusammenhang von incudine und Common Music kann man beide Begriffe im Grunde synonym verwenden. In diesem Text wird der Ausdruck Port für die in Jack sichtbaren Anschlüsse verwendet, während die softwareseitige Verwendung mit dem Begriff des Streams beschrieben wird. ↩