Jump to content
  • Sign in to follow this  

    Lesson 20. Skipping, Swallowing and Pausing


    opmo



    Annotation

    Adding silence into a musical texture is an important part of the craft of composing. In this piece there are three examples of how silent spaces can be achieved. Two are concerned with rhythmic space, what is called in Opusmodus the length-rest. The third is about silencing lists by generating pauses across sections. First, however, we need to explain skipping and swallowing. A list of pitches will fully map onto a list of lengths, provided there are no rest-lengths:

    (1/8 1/8 1/8 1/8 1/8)
    (c4 cs4 fs4 g4 c5)

     

    But when rest-lengths are added to the rhythm list things change! Either pitches can skip rest-lengths:

    (1/8 -1/8 1/8 -1/8 1/8)
    (c4       cs4      fs4)

     

    Or the rest-lengths can ‘swallow’ the pitches:

    (1/8 -1/8 1/8 -1/8 1/8)
    (c4       fs4      c5)

     

    The default in Opusmodus is to skip, but we've seen in Lesson 13 that if we use GEN-BINARY-RND and BINARY-MAP rest-lengths do swallow pitches!


    Section A

    Notice in this Stage the organisation of the score-script has changed. This is to enable us to score more easily in sections. Section A focuses on skipping and swallowing. The right hand swallows and the left hand skips. Notice also that the expressions have become more complex. The expression below creates the rhythm template:

    (setf t-seq (assemble-seq
                 (gen-eval 5 '(pitch-transpose
                               (rnd-range 3 7) 
                               (mclist pitches)) :seed 67)))
    => ((1 1 1 0 1) (1 1 1 1 0) (0 1 1 1 1) (1 1 1 1 0) (1 1 0 1 1))

     

    When we take the output map into this expression:

    (setf p-seq-i (binary-map map pitches))

     

    We can then see the pitch lists:

    => ((c4 cs4 fs4 c5) (c4 cs4 fs4 g4)
        (cs4 fs4 g4 c5) (c4 cs4 fs4 g4) (c4 cs4 g4 c5))

     

    But now we'll get the rhythm to 'swallow' with this expression. Check against the binary output:

    (setf p-sw (gen-swallow rhythm p-seq-i))
    => ((c4 cs4 fs4 c4) (c4 cs4 fs4 g4)
        (fs4 g4 c5 cs4) (c4 cs4 fs4 g4) (c4 cs4 c5 c4))
        
    => ((1 1 1 0 1) (1 1 1 1 0)
        (0 1 1 1 1) (1 1 1 1 0) (1 1 0 1 1))


    Section B

    Here the emphasis is on adding intervals to the pitch list to get a kind of improvised harmonisation.

    (setf t-seq
          (assemble-seq
           (gen-loop 5 (pitch-transpose
                        (rnd-range 3 7) 
                        (mclist pitches)) :seed 67)))

     

    Another complex expression, this time to create five lists of pitches that are transposed between 3 and 7 semitones above the original we hear in Section A. These are then to be 'swallowed’:

    (setq t-sw (gen-swallow rhythm t-seq))

     

    Now we'll mix the original and transposed lists together to create diads:

    (setf rh-mix 
          (gen-divide 4 (pitch-mix
                         (list (flatten p-sw) 
                               (flatten t-sw)))))

     

    Audition the MAKE-OMN expression for rh-2, the piano right hand.

    And in the left hand Audition the MAKE-OMN expression for lh-2, the piano right hand. Notice retrograde and transposition have been placed inside the MAKE-OMN expression.

    (setq lh-2
          (make-omn
           :length rhythm 
           :pitch (gen-retrograde (pitch-transpose -24 p-seq))
           :velocity '(mf)
           :articulation art-stacc))


    Section C

    This section shows how the GEN-PAUSE function can control the play of silence in sections. Notice that GEN-PAUSE has to be applied to length and pitch. There's a new function present in this section: CHORD-INTERVAL-ADD. This makes possible a harmonisation into diads of the left hand part.

    (setq lhp-pause
          (gen-pause (chord-interval-add 
                      '((5 6 7 5) (4 8 9 7) (3 5 6 7))
                      (gen-retrograde
                       (pitch-transpose -24 p-seq)))
                      :section '(1 3)))

     

    Whereas in Section B an expression t-seq was created to produce an 'improvised' harmonisation using intervals in a range, CHORD-INTERVAL-ADD allows the composer to chose precise interval sets. Here's the  left hand part before and after using CHORD-INTERVAL-ADD:

    => ((c3 g2 fs2 cs2 c2) (c3 g2 fs2 cs2 c2)
        (c3 g2 fs2 cs2 c2) (c3 g2 fs2 cs2 c2) (c3 g2 fs2 cs2 c2))
    
    => ((c3f3 g2cs3 fs2cs3 cs2fs2 c2f2) (nil)
        (c3eb3 g2c3 fs2c3 cs2gs2 c2eb2) (nil) (c3e3 g2eb3 fs2eb3 cs2gs2 c2e2))


    Score

    ;; Section A
    (setf pitches '(c4 cs4 fs4 g4 c5))
    (setf p-seq (gen-repeat 5 (list pitches)))
    (setf map (gen-eval 5 '(gen-binary-remove 
                           (rnd-pick pitches) pitches) :seed 5))
    
    (setf p-seq-i (binary-map map pitches))
    (setf rhythm (binary-map map 'e))
    (setf p-sw (gen-swallow rhythm p-seq-i))
    (setf art-stacc (gen-repeat 5 (list '(- - - stacc))))
    
    (setq rh-1 (make-omn
                :length rhythm
                :pitch p-sw
                :velocity '(f)
                :articulation art-stacc))
    
    (setq lh-1 (make-omn 
                :length rhythm
                :pitch (pitch-transpose -24 p-seq)
                :velocity '(f)
                :articulation art-stacc ))
    
    ;; Section B
    (setf t-seq (assemble-seq
                 (gen-eval 5 '(pitch-transpose
                               (rnd-range 3 7) 
                               (mclist pitches)) :seed 67)))
    
    (setq t-sw (gen-swallow rhythm t-seq))
    
    (setf rh-mix 
          (gen-divide 4 
                      (pitch-mix
                       (list (flatten p-sw)
                             (flatten t-sw)))))
    
    (setq rh-2 (make-omn
                :length rhythm
                :pitch rh-mix 
                :velocity '(mf)
                :articulation art-stacc))
    
    (setq lh-2 (make-omn
                :length rhythm
                :pitch (gen-retrograde (pitch-transpose -24 p-seq))
                :velocity '(mf)
                :articulation art-stacc))
    
    ;; Section C
    (setq rhr-pause (gen-pause rhythm :section '(0 4)))
    (setq rhp-pause (gen-pause
                     (gen-retrograde rh-mix :section '(2))
                     :section '(0 4)))
    
    (setq lhr-pause (gen-pause rhythm :section '(1 3)))
    (setq lhp-pause (gen-pause
                     (chord-interval-add
                      '((5 6 7 5) (4 8 9 7) (3 5 6 7))
                      (gen-retrograde
                       (pitch-transpose -24 p-seq)))
                     :section '(1 3)))
    
    (setq rh-3 (make-omn
                :length rhr-pause
                :pitch rhp-pause
                :velocity '(mp)
                :articulation art-stacc))
    
    (setq lh-3 (make-omn
                :length lhr-pause
                :pitch lhp-pause  
                :velocity '(mf)
                :articulation art-stacc))
    
    (setq rh-ABCA (assemble-seq rh-1 rh-2 rh-3 rh-1))
    (setq lh-ABCA (assemble-seq lh-1 lh-2 lh-3 lh-1))
    
    (def-score lesson-20
               (:key-signature 'chromatic
                :time-signature '(5 8)
                :tempo '(q 80)
                :layout (piano-layout 'piano-rh 'piano-lh))
      
      (piano-rh    
       :omn rh-ABCA
       :channel 1
       :sound 'gm
       :program 'acoustic-grand-piano)  
      
      (piano-lh    
       :omn lh-ABCA)
      )


    Notation

    Screen Shot 2017-12-05 at 16.59.35.png

     

    Next page Lesson 21. Mapping, Substituting and Interleaving

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