Unlike most of the other Stages this piece begins with rhythm. This is very much a 20th century approach to composition often employed by Stravinsky and Messiaen. But this piece takes something of the rhythmic (and later the melodic) character of Bartok. It begins with a collection of variables of rhythms occupying a quarter or dotted quarter beat.
If we describe the rhythms as individual variables we can build lists with them and evaluate them with APPLY-EVAL. We’ll let the function RND-SAMPLE help us improvise a ten-beat phrase of these rhythms for the right hand until a suitable collection appears. Then, using the output of rhy-1 as a guide, the composer writes a left hand rhythmic part as a complement to the right hand part. This is done with the QL function, a kind of musical shorthand for writing note lengths. Using QL, (4 s) is the same as writing (s s s s).
Now we can add pitches. To achieve the Bartokesque pitch series the GEN-SINE function creates a wave-form that outputs chromatic pitches between e4 and b4.
(gen-sine (get-count rhy-1 :sum t) 2 '(0.2 0.7))
The important part of this expression is:
(get-count rhy-1 :sum t)
The function GET-COUNT is a more advanced version of the LISP primitive LENGTH. It counts the note-lengths in the lists of rhy-1:
=> ((e e e) (s s e) (e s s) . . .)) (3 3 3 . . .)
... and then sums them together. We now know exactly how many pitches GEN-SINUS must generate. By doing things this way we could change the rhythmic sequence and not have to worry about counting! At this point we just have a long list of pitches. By spanning the variable rhy-1 to wave the lists become organised.
=> ((gs4 a4 gs4) (b4 a4 b4) (gs4 gs4 g4) . . .))
Notice that the pitch for the left hand is simply '(b2 e2) and it's written into the MAKE-OMN expression. So it loops . . .
In Section B the roles are reversed. The piano right hand has two chords that loop and the left hand has a wave-generated melody. This time the rhythms described as variables with a quarter or dotted quarter beat are more complex. They include tuplets, rest-lengths and a tied note.
'(5q = = = =)
The = above means repeat the note length, while in the list:
'(-s s_3q 3q 3q)
-s means a rest-length for a 1/16
s_3q means a 1/16 is tied to a triplet 1/8
Finally, notice in Section B how we've created two expressions together and inverted the wave-form:
(setf wave-i (vector-to-pitch '(fs2 fs3) (gen-sine (get-count rhy-2 :sum t) 2 '(0.2 0.7)))) (setf wave-l (span rhy-2 (pitch-invert wave-i)))
;; Section A (setf rhy-1 '((e = =) (s = e) (e s =) (s e s) (e =) (s e s) (e s =) (s = e) (e s =) (e = =))) (setf rhy-a (ql '((1 q.) (2 e) (2 e) (2 e) (4 s) (1 q) (1 q) (1 q) (2 e) (2 e 2 s)))) (setf wave (vector-to-pitch '(e4 b4) (gen-sine (get-count rhy-1 :sum t) 2 '(0.2 0.7)))) (setf wave-r (span rhy-1 wave)) (setf rh-1 (make-omn :pitch wave-r :length rhy-1 :velocity '(f))) (setf lh-1 (make-omn :pitch '(b2 e2) :length rhy-a :velocity '(p))) ;; Section B (setf rhy-2 '((-s = = = = =) (5q = = = =) (-s = = = = =) (-s s_3q 3q =) (-s = = = = =) (3h 3q) (-s s_3q 3q =) (-3q = =) (3h 3q) (-s = = = = =))) (setf rhy-b (ql '((3 e) (1 q) (2 e 2 s) (1 q 1 e) (3 e) (2 e) (1 e 1 q) (1 q) (1 q) (1 q 1 e)))) (setf wave-i (vector-to-pitch '(fs2 fs3) (gen-sine (get-count rhy-2 :sum t) 2 '(0.2 0.7)))) (setf wave-l (span rhy-2 (pitch-invert wave-i))) (setf rh-2 (make-omn :pitch '(cs4fs4 e4b4) :length rhy-b :velocity '(p))) (setf lh-2 (make-omn :pitch wave-l :length rhy-2 :velocity '(ff))) (setf p-rh (assemble-seq rh-1 rh-2 rh-1)) (setq p-lh (assemble-seq lh-1 lh-2 lh-1)) (setf timesigs (get-time-signature p-rh)) (def-score lesson-22 (:key-signature 'chromatic :time-signature timesigs :tempo 60 :layout (piano-layout 'piano-rh 'piano-lh)) (piano-rh :omn p-rh :channel 1 :sound 'gm :program 'acoustic-grand-piano) (piano-lh :omn p-lh) )
Next page Lesson 23. Intervals and Rows
Go back to Reference page.
Edited by opmo