4.6.1. output
Die direkteste Form wird durch die Funktion output
bereitgestellt. output
gibt immer genau ein Ereignis aus, das der Funktion als Argument übergeben werden muss. Wird die Funktion im top-level evaluiert, wird der :time
Slot des Ereignisses von der Funktion ignoriert und das Ereignis direkt ausgegeben. Über das Keywort :to
besteht die Möglichkeit, den output-stream zu spezifizieren. Wenn das Keywort :to
nicht verwendet wird, erfolgt die Ausgabe auf den Stream, der an das Symbol *rts-out*
gebunden ist.
Zusätzlich besteht die Möglichkeit, die Ausgabe mit dem Keywort :at
zu verzögern. Der Wert von at wird in Sekunden angegeben, die auf den Moment, an dem der Ausdruck evaluiert wird, bezogen sind. Negative Werte für :at
sollten vermieden werden.
;; realtime output einer Note: (output (new midi)) (output (new midi :keynum 62 :duration 4)) (output (new midi :keynum (+ 48 (random 24)) :duration 4)) ;; Ausgabe 1 Sekunde nach Auswertung: (output (new midi) :at 1) (* 3 4 5) ;;; -> 60 (sprout (process repeat 10 output (new midi :time (now)) wait 0.2))
Sollen mehrere Ereignisse ausgegeben werden, ist es möglich, mehrere Aufrufen von output
mit der special form progn
zu einem Block zusammenzufassen. Sämtliche output
Ausdrücke in dem progn
Block werden dabei simultan ausgeführt. Rhythmen lassen sich durch die Verwendung des Keyworts :at
realisieren:
;; Ausgabe eines simultanen Durdreiklangs mit output: (progn (output (new midi :keynum 60)) (output (new midi :keynum 64)) (output (new midi :keynum 67))) ;; Ausgabe eines Arpeggios mit output: (progn (output (new midi :keynum 60)) (output (new midi :keynum 71) :at 0.5) (output (new midi :keynum 66) :at 2))