Jump to content
  • Sign in to follow this  

    Lesson 18. A Chorale with Integers


    opmo



    Annotation

    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))
    
    (pitch-mix
     (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
          (make-omn 
           :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))


    Score

    (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))
    
      (piano-rh    
       :omn rh-1
       :channel 1
       :sound 'gm
       :program 'acoustic-grand-piano)  
      
      (piano-lh    
       :omn lh-1)
      )
    ;; Setting random back to NIL
    (init-seed nil)


    Notation

    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


    Sign in to follow this  



  • Introduction to OMN the language

    OMN is designed as a scripting language for musical events. It’s not about sounds themselves, it is about their control and organisation in a musical composition. As a linear script rather than a graphic stave, musical events can be transformed, extended, reorganised by powerful computer algorithms. Some sequencers and score writers provide basic algorithms, but they do not represent the way composers now think about the process of music composition. Composing has become such a multi-faceted pro

    opmo
    opmo
    OMN The Language 0
  • Introduction to Opusmodus

    Contents A Contemporary Language for Making Music The Parametric World of Music The Parametric Instrument Learning Opusmodus : A Strategy Important Questions: Necessary Answers

    opmo
    opmo
    Tutorial Guide 0
  • CLM Installation

    Contents CLM Installation Command Line Tools Load and Compile Instruments CLM Installation Common Lisp Music, by William Schottstaedt is a powerful sound synthesis language implemented in Lisp and C. CLM is essentiall

    opmo
    opmo
    CLM Examples 0
×
×
  • Create New...