Jump to content
  • Opusmodus
  • Lesson 18. A Chorale with Integers



    The aim of this piece is to make a chorale in 4 voices using integers as the building block for pitch and structure. 

    The opening expressions use two random functions: RND-PICK and RND-SAMPLE. It would be usual to apply the keyword :seed for each occurrence of the random function, but here, at the very opening of the score-script we'll apply a global seed instead:

    (init-seed 32)


    This covers all the possible seed settings throughout the piece. Try changing this global seed and listen / see the difference in the chord voicings.

    (setf row-1 '(12 11 10 9 8)
          row-2 '(7 8 9 10 11)
          row-3 '(6 7 6 7 6)
          row-4 '(1 2 3 4 5))


    This is the first occasion a short-cut to naming variables has been used.


    The row material is a matrix of integer-derived pitches based on the first 5 patterns from Slonimsky's Thesaurus. The pitch material used so far in the Stages has been just the first pattern in this set.


    The INTEGER-TO-PITCH conversion takes place here inside the PITCH-MIX expression.

    (setf rh-ab (pitch-mix 
                 (list (integer-to-pitch rh-a)
                       (integer-to-pitch rh-b))))


    Evaluate this expression in sections to see the structure necessary to mix two lists of pitches into diads.

    (integer-to-pitch rh-b)
    (list (integer-to-pitch rh-a)
          (integer-to-pitch rh-b))
     (list (integer-to-pitch rh-a)
           (integer-to-pitch rh-b)))


    Remember you can evaluate an expression from inside these guidance notes!

    A feature of most chorales is the fermata at the end of each phrase: 

    (setf ferm (gen-repeat 5 (list '(- - - - fermata2))))


    Think of the fermata as part of the articulation. So it has to be placed in the MAKE-OMN parameter list like this:

    (setf rh-1
           :length rhy-1
           :pitch rh-ab
           :velocity dyn-1
           :articulation ferm))


    Here's the resulting first bar of 5/4 in OMN:

    => ((q b4a4 f bb4a4 mp b4g4 mf b4a4 f bb4gs4 ff fermata2)
        (q bb4gs4 mf bb4b4 f gs4 mp bb4a4 p gs4g4 pp fermata2) 
        (q bb4g4 p b4a4 mp c5a4 mf gs4b4 mp gs4a4 mf fermata2) 
        (q a4gs4 f a4g4 ff bb4g4 f c5gs4 mf gs4b4 mp fermata2) 
        (q gs4b4 mf bb4b4 p c5gs4 mp bb4g4 p gs4 pp fermata2))


    (init-seed 2)
    ;; Change the random seed value to create
    ;; different 'chorale' voicings
    (setf row-1 '(12 11 10 9 8)
          row-2 '(7 8 9 10 11)
          row-3 '(6 7 6 7 6)
          row-4 '(1 2 3 4 5))
    (setf r-1 (rnd-pick (list row-1 row-1 row-1 row-2 row-3))
          r-2 (rnd-pick (list row-2 row-3 row-3 row-4 row-4))
          r-3 (rnd-pick (list row-1 row-1 row-2 row-2 row-3))
          r-4 (rnd-pick (list row-2 row-3 row-4 row-4 row-4)))
    (setq rh-a (rnd-sample 25 r-1)
          rh-b (rnd-sample 25 r-2))
    (setf lh-a (rnd-sample 25 r-3)
          lh-b (rnd-sample 25 r-4))
    (setf rh-ab (pitch-mix
                 (list (integer-to-pitch rh-a)
                       (integer-to-pitch rh-b))))
    (setf lh-ab (pitch-mix
                 (list (integer-to-pitch lh-a)
                       (integer-to-pitch lh-b))))
    (setf lh-abt (pitch-transpose -12 lh-ab))
    (setf rhy-1 (gen-repeat 5 (list '(q q q q q))))
    (setf ferm (gen-repeat 5 (list '(- - - - fermata2))))
    (setq dyn-1 '((f mp mf f ff) (mf f mp p pp) (p mp mf mp mf) 
                  (f ff f mf mp) (mf p mp p pp)))
    (setf rh-1 (make-omn 
                :length rhy-1
                :pitch rh-ab
                :velocity dyn-1
                :articulation ferm))
    (setf lh-1 (make-omn 
                :length rhy-1
                :pitch lh-abt
                :velocity dyn-1
                :articulation ferm))
    (setf timesigs (get-time-signature rh-1))
    (def-score lesson-18
               (:key-signature 'chromatic
                :time-signature timesigs
                :tempo '(q 70)
                :layout (piano-layout 'piano-rh 'piano-lh))
       :omn rh-1
       :channel 1
       :sound 'gm
       :program 'acoustic-grand-piano)  
       :omn lh-1)
    ;; Setting random back to NIL
    (init-seed nil)


    Screen Shot 2017-12-05 at 15.31.12.png


    Next page Lesson 19. Randomization and Variation

    Go back to Reference page.

    Edited by opmo

  • Create New...

Important Information

Terms of Use Privacy Policy