Next: Die Partitur mit errechneten Wiederholungen der Sektionen , Previous: Exkurs: Reihenfolge von Bindungen und destructuring-bind in loop Ausdrücken , Up: Steve Reich: Piano Phase , Home: Allgemeine Einführung

Algorithmische Komposition mit Common Lisp

Die Partitur

Um das ganze Stück zu realisieren, wird das Format für die Partitur aus Ein ganzer Teil erweitert, indem mehrere, verschiedene Teile in einer Liste zusammengefasst werden:

;;; Sektion:

(anzahl-wiederholungen (shift-pno1 shift-pno2))

;;; Teil:

(sektion1 sektion2 sektion3 ...)

;;; Gesamtpartitur

(teil1 teil2 teil3 ...)

Zusätzlich sind bei der Partitur noch folgende Dinge zu beachten:

  • Da die Anzahl der Wiederholungen zwischen einer Mindestanzahl und einer Maximalanzahl frei wählbar ist, wird in einer Sektion an Stelle von einer Zahl für die Anzahl der Wiederholungen eine Liste mit der Mindestanzahl und der Maximalanzahl der Wiederholungen verwendet.
  • Zu Beginn einiger Teile pausiert eines der beiden Pianos. Hierfür wird in der Partitur bei der jeweiligen Partitur für das pausierende Piano der Wert nil in der Liste der Phasenverschiebungen eingetragen.
  • Einige Sektionen enthalten in einem der Klaviere ein Crescendo bzw. Decrescendo über die gesamte Dauer der Sektion. Für diejenigen Sektionen wird eine Liste mit zwei Elementen als drittes Element in die Partitur eingetragen. In dieser Liste wird für das Klavier, in dem ein Crescendo oder Decrescendo notiert ist, das Keyword :cresc bzw. :decresc eingetragen. Für das andere Klavier wird der Wert nil eingetragen.

    Abb. 13 zeigt einen Ausschnitt aus der Partitur von Piano Phase und die dazugehörige lisp Partitur unter Berücksichtigung der Änderungen der Partitursyntax.

piano-phase-score-excerpt.png
Abbildung 13: Beginn von Pianophase und der dazugehörige Partiturausschnitt.

Die gesamte Partitur von Piano Phase kann man auf diese Weise folgendermaßen zusammenfassen:

(defparameter *piano-phase-score*
  '((((4 8) (0 nil))                             ;;;  1  Beginn 1. Teil
     ((12 18) (0 0) (nil :cresc)) ((4 16) (0 1)) ;;;  2
     ((16 24) (0 0)) ((4 16) (0 1))              ;;;  3
     ((16 24) (0 0)) ((4 16) (0 1))              ;;;  4
     ((16 24) (0 0)) ((4 16) (0 1))              ;;;  5
     ((16 24) (0 0)) ((4 16) (0 1))              ;;;  6
     ((16 24) (0 0)) ((4 16) (0 1))              ;;;  7
     ((16 24) (0 0)) ((4 16) (0 1))              ;;;  8
     ((12 24) (0 0)) ((4 16) (0 1))              ;;;  9
     ((12 24) (0 0)) ((4 16) (0 1))              ;;; 10
     ((12 24) (0 0)) ((4 16) (0 1))              ;;; 11
     ((12 24) (0 0)) ((4 16) (0 1))              ;;; 12
     ((12 24) (0 0)) ((4 16) (0 1))              ;;; 13
     ((4 8) (0 0) (nil :decr))                   ;;; 14
     ((4 8) (0 nil)))                            ;;; 15
    (((6 8) (0 nil))                             ;;; 16  Beginn 2. Teil
     ((16 32) (0 0) (nil :cresc)) ((6 18) (0 1)) ;;; 17
     ((16 32) (0 0)) ((6 18) (0 1))              ;;; 18
     ((16 32) (0 0)) ((6 18) (0 1))              ;;; 19
     ((16 32) (0 0)) ((6 18) (0 1))              ;;; 20
     ((16 32) (0 0)) ((6 18) (0 1))              ;;; 21
     ((16 32) (0 0)) ((6 18) (0 1))              ;;; 22
     ((16 32) (0 0)) ((6 18) (0 1))              ;;; 23
     ((16 32) (0 0)) ((6 18) (0 1))              ;;; 24
     ((8 24) (0 0) (:decr nil))                  ;;; 25
     ((8 16) (nil 0)))                           ;;; 26
    (((2 2) (nil 0)))                            ;;; 26a Beginn 3. Teil
    (((8 24) (nil 0))                            ;;; 27  Beginn 4. Teil
     ((24 48) (0 0)) ((16 32) (0 1))             ;;; 28
     ((48 60) (0 0)) ((16 32) (0 1))             ;;; 29
     ((48 60) (0 0)) ((16 32) (0 1))             ;;; 30
     ((48 60) (0 0)) ((16 32) (0 1))             ;;; 31
     ((24 48) (0 0)))))                          ;;; 32

Diese Partitur beinhaltet lediglich die Wiederholungen und die Verschiebungen der Phrasen zueinander, allerdings nicht die Töne der Phrasen selbst.

Für die Phrasen wird eine neue Variable definiert, die die Phrasen für die einzelnen Teile enthält. Da die Phrasen beider Klaviere in Teil 2 nicht identisch sind, wird an dieser Stelle statt einer Phrase eine Liste mit den Phrasen für Piano 1 und Piano 2 verwendet. Damit sieht die Liste der Phrasen für Piano Phase folgendermaßen aus

(defparameter *piano-phase-patterns*
  '((64 66 71 73 74 66 64 73 71 66 74 73) ;;; 1-15   1. Teil
    ((64 66 71 73 74 66 71 73)            ;;; 16-26  2. Teil
     (64 76 69 71 74 76 69 71))
    (64 76)                               ;;; 26a    3. Teil
    (69 71 74 76)))                       ;;; 27-32  4. Teil