Next: Die rts Funktion , Previous: Starten der Echtzeitverarbeitung von incudine , Up: Starten von Clamps und der Echtzeitverarbeitung im Detail , Home: Allgemeine Einführung

Algorithmische Komposition mit Common Lisp

Midi Input und Output in Echtzeit

Echtzeit Ein- Ausgabe von Midiereignissen wird über Streams und Ports abgewickelt1.

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.

Ein Aufklappen dieser Einträge zeigt, dass der Name der Midi Ports "midiout-1" bzw. "midiin-1" ist. Wie man erkennen kann, ist dieser Name nicht identisch mit den Symbolen dieser Ports in Clamps (*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.

incudine-jack-midi.png
Abbildung 9: Incudine JackMidi Ports in QjackCtl

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 "midiout-2" zu sehen sein.

incudine-jack-midi2.png
Abbildung 10: Incudine JackMidi Ports in QjackCtl

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*)

Fußnoten:

1

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 Clamps 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.