In an earlier piece we transposed the pitch row sequentially by its own intervals. Now we're doing the same but making a retrograde structure. To do this we have to use the keyword :flatten. Look at the difference without :flatten:
(gen-retrograde p-transp) => ((c5 g4 fs4 cs4 c4) (cs5 gs4 g4 d4 cs4) (fs5 cs5 c5 g4 fs4) (g5 d5 cs5 gs4 g4) (c6 g5 fs5 cs5 c5))
. . . and with :flatten
(setf r-transp (gen-retrograde p-transp :flatten t)) => ((c6 g5 fs5 cs5 c5) (g5 d5 cs5 gs4 g4) (fs5 cs5 c5 g4 fs4) (cs5 gs4 g4 d4 cs4) (c5 g4 fs4 cs4 c4))
Without :flatten, the contents of each sub-list are retrograded, but the sub-lists themselves maintain their original position. With :flatten set to t (true), the positions of all sublists have also been reversed.
Now we'll use two different forms of the AMBITUS function. The Latin word ambitus means range. We're going to scale down the range of the p-transp lists to a lower octave. Look carefully at the difference in output with and without the keyword :flat-invert set:
=> ((c3 cs3 fs3 g3 c4) (cs3 d3 g3 gs3 ds3) . . .)) => ((c3 cs2 fs2 g2 c3) (cs2 d2 g2 gs2 cs2) . . .))
Next follows a striking interlude in 1/16ths made from the AMBITUS-SERIES function. Each of the 5/16 bars has a different range assigned to it. Notice how the note-lengths and dynamics are handled. Also, see how the interlude is assigned to the right hand (although in practise a pianist would use left and right). The left hand part needs to be paused. This is how it's done using the function GEN-PAUSE:
(setf p-lh2 (gen-pause p-rh2 :section '(0 1 2 3 4)))
What GEN-PAUSE does in this instance is to replace each of the five sub-lists (numbered 0 to 4) in p-rh2 with (nil).
The dynamics are organised to create crescendos and diminuendos over 5 bar phrases. By using the function MCLIST we only need to write a flat list of dynamics, which will be bundled into lists associated with the five bars in each section:
(setf dynamics (mclist '(p mp mf f ff))) => ((p) (mp) (mf) (f) (ff))
(setf pitches '(c4 cs4 fs4 g4 c5)) (setf p-transp (pitch-transpose (pitch-to-integer pitches) (gen-repeat 5 (list pitches)))) (setf r-transp (gen-retrograde p-transp :flatten t)) (setf c-ambitus (ambitus '(c2 c3) p-transp)) (setf p-ambitus (ambitus '(c2 c3) p-transp :type :flat-invert)) (setf s-ambitus (ambitus '((c2 c3) (b2 f3) (g3 cs4) (fs4 g5) (c4 c5)) p-transp)) (setf lengths (span p-transp '(1/8))) (setf interlude (span s-ambitus '(1/16))) (setf dynamics (mclist '(p mp mf f ff))) (setq r-dynamics (mclist '(ff f mf mp p))) (setf p-rh1 (make-omn :length lengths :pitch p-transp :velocity dynamics)) (setf p-lh1 (make-omn :length lengths :pitch c-ambitus :velocity dynamics)) (setf p-rh2 (make-omn :length interlude :pitch s-ambitus :velocity r-dynamics)) (setf p-lh2 (gen-pause p-rh2 :section '(0 1 2 3 4))) (setf p-rh3 (make-omn :length lengths :pitch r-transp :velocity dynamics)) (setf p-lh3 (make-omn :length lengths :pitch p-ambitus :velocity dynamics)) (setf rh-1 (assemble-seq p-rh1 p-rh2 p-rh3)) (setf lh-1 (assemble-seq p-lh1 p-lh2 p-lh3)) (setf timesigs (get-time-signature rh-1 :group '((5)))) (def-score lesson-16 (:key-signature 'chromatic :time-signature timesigs :flexible-clef t :tempo 80 :layout (piano-layout 'piano-rh 'piano-lh)) (piano-rh :omn rh-1 :channel 1 :sound 'gm :program 'acoustic-grand-piano) (piano-lh :omn lh-1) )
Next page Lesson 17. Working with Integers
Go back to Reference page.
Edited by opmo