Algorithmische Komposition mit Common Lisp
Zwei Patterns mit Verschiebung
Um das Pattern in beiden Pianos zu spielen, kann man die Listen
mit den sfz Instanzen für beide Pianos generieren und dann mit
Hilfe der Funktion append zu einer Gesamtliste
zusammenfassen. Mit Hilfe des :pan
Keywords bei der Erzeugung
der sfz Instanz werden dabei die Töne von Piano 1 auf dem linken
und die Töne von Piano 2 auf dem rechten Kanal ausgegeben.
(in-package :clamps) (sprout (append (loop ;;; Piano 1 with pattern = '(64 66 71 73 74 66 64 73 71 66 74 73) with num-repeats = 10 with dtime = 0.139 for i below (* (length pattern) num-repeats) collect (new sfz :time (* i dtime) :keynum (elt pattern (mod i (length pattern))) :duration dtime :amplitude -6 :preset :yamaha-grand-piano :pan 0)) (loop ;;; Piano 2 with pattern = '(64 66 71 73 74 66 64 73 71 66 74 73) with num-repeats = 10 with dtime = 0.139 for i below (* (length pattern) num-repeats) collect (new sfz :time (* i dtime) :keynum (elt pattern (mod i (length pattern))) :duration dtime :amplitude -6 :preset :yamaha-grand-piano :pan 1))))
Um die allmähliche Verschiebung zu realisieren, wird das zweite
Klavier durch Verkleinerung des Rhythmus beschleunigt. Wenn man
die Verschiebing um einen Ton nach 10 Wiederholungen des Patterns
erreichen möchte, muss man den ursprünglichen Rhythmus mit einem
Faktor multiplizieren, der dem Quotienten von Gesamtanzahl der
Töne
und (1+ Gesamtanzahl der Töne)
entspricht:
(in-package :clamps) (sprout (append (loop ;;; Piano 1 with pattern = '(64 66 71 73 74 66 64 73 71 66 74 73) with num-repeats = 10 with dtime = 0.139 for i below (* (length pattern) num-repeats) collect (new sfz :time (* i dtime) :keynum (elt pattern (mod i (length pattern))) :duration dtime :amplitude -6 :preset :yamaha-grand-piano :pan 0)) (loop ;;; Piano 2 with pattern = '(64 66 71 73 74 66 64 73 71 66 74 73) with num-repeats = 10 with num-notes = (* (length pattern) num-repeats) with dtime = (* 0.139 (/ num-notes (1+ num-notes))) for i below (1+ num-notes) collect (new sfz :time (* i dtime) :keynum (elt pattern (mod i (length pattern))) :duration dtime :amplitude -6 :preset :yamaha-grand-piano :pan 1))))