Jump to content
  • Sign in to follow this  

    Lesson 22. Lengths and Rhythms



    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.

    Section A

    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 . . .

    Section B

    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
           '(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))
       :omn p-rh
       :channel 1
       :sound 'gm
       :program 'acoustic-grand-piano)  
       :omn p-lh)


    Screen Shot 2017-12-05 at 17.50.51.png


    Next page Lesson 23. Intervals and Rows

    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

    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

    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

    CLM Examples 0
  • Create New...