4.6.3. events

events ist eine Form der Ausgabe von Ereignissen, die in Common Music implementiert wurde, bevor die Echtzeitausgabe von Ereignissen mit Computern möglich war.

Ähnlich, wie bei sprout ist es mit der events Funktion möglich, einzelne Ereignisse, Listen von Ereignissen, Prozesse oder andere cm Typen, wie auszugeben. Auch bei der Ausgabe durch events muss bei allen auszugebenden Ereignissen der :time Slot gesetzt sein.

Als drittes Argument wird der events Funktion das Ziel (englisch destination) übergeben.

Wenn dieses Argument eine Zeichenkette (englisch string) ist, wird diese als Dateiname interpretiert und die Ereignisse in eine Datei ausgegeben, deren Typ sich nach der Endung des Dateinamens richtet. Die wichtigsten Endungen sind in der nachfolgenden Tabelle aufgeführt

Dateinamenendung Typ der Ausgabedatei
".midi", ".mid" MIDI-Datei
".ly" Lilypond Datei
".cmn" CMN Datei
".clm" CLM Datei
".aiff", ".snd", ".wav" CLM Audiodatei

Je nach Ausgabeformat existieren Zusatzoptionen, zur genaueren Steuerung des Ausgabeformats, die der events Funktion mit Hilfe von Keywortargumenten übergeben werden. Eine Auflistung der Optionen findet sich im Common Music Dictionary unter midi-file, fomus-file, cmn-file, clm-file und audio-file.

Wenn anstelle einer Zeichenkette ein angegeben wird, so werden die Ereignisse ähnlich wie bei sprout auf die Echtzeitausgänge geleitet.

Wird das dritte Argument ausgelassen, wird das Ausgabeformat des letzten Aufrufs der events Funktion verwendet.

;;; Ausgabe in die Midi Datei "/tmp/test.midi":

(events
 (list
  (new midi :keynum 60 :time 0)
  (new midi :keynum 62 :time 0.5)
  (new midi :keynum 64 :time 1))
 "/tmp/test.midi")

;; realtime output einer Note mit der events Funktion:

(events
 (new midi :time 0)
 *rts-out*)

;; wird das zweite Argument weggelassen, wird die zuletzt verwendete
;; Ausgabemethode benutzt:

(events
 (new midi :time 0))

Der Unterschied zwischen events und sprout besteht darin, dass events direkt bei Auswertung sämtliche Ereignisse generiert und dem Echtzeitscheduler mit den entsprechenden Zeitinformationen übergibt, während im Falle von sprout ein process nur das jeweils nächste Element generiert und sich über den scheduler zeitverzögert wiederholt aufruft, bis der Prozess beendet ist. Solch eine Form der schrittweisen, sukzessiven Auswertung erst zu dem Zeitpunkt, an dem ein neues Element benötigt wird, ist eine Programmiertechnik, die unter dem Begriff Lazy Evaluation bekannt ist. Ein Vorteil dieser Technik besteht darin, dass man einen Prozess definieren und starten kann, der prinzipiell unendlich ist. Von aussen kontrolliert werden solche Prozesse dann durch das Setzen einer globalen Variable, die vom Prozess zur Ausführungszeit überprüft wird, und über die er sich, wenn sie gesetzt ist, selbst stoppt.

Für solche eine Methode kann events nicht eingesetzt werden, da ein solcher Prozess sofort einen Überlauf erzeugt, da unendlich viele Werte unmittelbar generiert werden müssten.

Um in eine Lilypond Datei zu exportieren, muss zuvor das Paket "cm-fomus" geladen worden sein.

;;; Ausgabe in eine Lilypond Datei:

(ql:quickload "cm-fomus")

(events
 (list
  (new midi :keynum 60 :time 0)
  (new midi :keynum 62 :time 0.5)
  (new midi :keynum 64 :time 1))
 "/tmp/test.ly")

Nach Evaluation des obenstehenden Ausdrucks sollte sich die Datei "test.ly" im Ordner "/tmp" befinden. Sie lässt sich anschließend mit dem Programm lilypond setzen und ergibt die untenstehende Notengrafik.

lilypond test

results matching ""

    No results matching ""