Jump to content
  • Sign in to follow this  

    Lesson 23. Intervals and Rows




    A 12-tone Invention

    This score-script takes further the techniques used for length and rhythm composition used in Lesson 22. Like many pieces in an atonal / serial idiom a rhythmic sketch is devised first. The objective is to create a 2-part invention in the spirit of J. S. Bach. Notice in this score there's a division made between rhythm and length, and pitch material. We start with rhythm:

    (setf r1 '(s s s s) 
          r2 '(e e)
          r3 '(e s s) 
          r4 '(s s e) 
          r5 '(-e e e e) 
          r6 '(-q h)
          . . .)


    Just as in Lesson 22, groups of note-lengths are brought together as rhythmic units and identified as variables. We can now assemble bars / list of these rhythms.

    (setf rh
           '((r1 r1 r2) (r6) (r15 r1 r8) (r9) (r10)
             . . . ))


    Of course, we could just write out each bar/list in OMN lengths:

    => ((s s s s s s s s e e) (-q h)
        (-q s s s s e e e) (e e e q)
        (q q q -q) (q h q) . . .))


    Don't forget you can Audition these rhythms. Also, it might be a good move to check the rhythmic interplay between the hands before adding pitches. 


    Next we create the pitch content. This is to be based yet again on the Slonimsky pattern used in almost all the stages so far. But we'll use it as a pitch-class-set. In this context it is known as the double tritone tetramirror and in Forte pitch class notation has the reference 4-9. We can use the many Opusmodus interval and pitch-class-set functions to explore its potential as material for a composition for solo piano using the techniques of 12-note atonal composition. Here are just some of the processes you might use to manipulate pitch class sets:

    (setf pcs-4-9-i (pcs-inversion pcs-4-9 :type :pitch))
    => ((c4 b4 fs4 f4) (b4 as4 f4 e4)
        (as4 a4 e4 ds4) (a4 gs4 ds4 d4) . . .))
    (pcs-complement 4 4 (pcs '4-9) :type :pitch)
    => (d4 ds4 e4 f4 gs4 a4 as4 b4)
    (pcs-complement 4 4 (pcs '4-9) :type :integer)
    => (2 3 4 5 8 9 10 11)
    (pcs '4-9 :type :pitch)
    => (c4 cs4 fs4 g4)
    (interval-randomize 4 (pcs '4-9))
    => ((0 -1 -6 7) (0 -1 6 -7) (0 1 -6 -7) (0 -1 6 7))
    (interval-randomize 4 (pcs '4-9) :rnd-order t)
    => ((1 6 -7 0) (-6 -1 7 0) (-6 7 0 -1) (1 0 6 -7))
    (interval-scale 1.5 (pcs '4-9))
    => (0 2 9 10)
    (row-matrix (pcs '4-9))
    => ((0 1 6 7) (11 0 5 6) (6 7 0 1) (5 6 11 0))
    (interval-row-matrix (pcs '4-9))
    => ((0 1 6 7) (-11 0 5 6) (-6 -7 0 1) (-5 -6 -11 0))


    As a result of this exploration of PCS 4-9 it was discovered that when the set was transposed there were six unique sets all having intervals that were not shared with the PCS set 4-9. This seemed a good premise from which to work.

    (setq row (pcs '4-9))
    => (0 1 6 7)
    (setf transposed-rows-r 
          (pcs-transpose (gen-integer 0 11) 
                         (gen-repeat 12 (list row))))
    => ((0 1 6 7) (1 2 7 8) (2 3 8 9) (3 4 9 10) 
                             1         2
        (4 5 10 11) (5 6 11 0)  6 7 0 1) (7 8 1 2)                   
        (8 9 2 3) (9 10 3 4) (10 11 4 5) (11 0 5 6))
         4         5          6    

     The next step was randomise this tranposed-row collection and scale it to give a wider interval range:

    (setf scaled-intervals-r 
          (interval-scale 0.75
               (rnd-sample (length lh)
                 transposed-rows-r :seed 34)))
    (setf rhy-to-rh (span rh scaled-intervals-r))


    By spanning the rhythms in the right hand the output of each list now aligns:

    => ((6 7 2 2 6 7 2 2 6 7) (4) (2 3 7 -8 2 3 7) (-2 -3 -7 -8) (-6 -7 -2)
        (-2 -3 -7) (-8 0) (-3 4) (4 5 0 1 4 5 0 1) (8 8 3 4 8 8 3 4 8 8 3)
        (6 7 2 2 6 7 2) (7 8 2 -3 7 8 2 -3 7 8 2 -3) (-4 -4 -8 0)
        (-5 -6 -1 -2 -5 -6) (-8 0 -4 -4 -8 0) (-7 -8 -2 -3 -7)
        (-7 -8 -2) (2 2 6 7))
    => ((s s s s s s s s e e) (-q h) (-q s s s s e e e) (e e e q) (q q q -q)
        (q h q) (-q -q e e) (q q -q) (-e e e e e e e s s) (-e s s s s s s 5q 5q 5q 5q 5q)
        (6q 6q 6q 6q 6q 6q -e q.) (s s s s s s s s s s s s) (q q q q)
        (-q 3q 3q 3q 3q 3q 3q) (3q 3q 3q -q 3q 3q 3q) (5h 5h 5h 5h 5h -q)
        (-q e q e) (e e e e))


    And finally, as above, the integers are changed into pitches and transposed up an octave:

    (setf rh-p (pitch-transpose 12 (integer-to-pitch rhy-to-rh)))


    But it's necessary to do a little more to these melodic patterns to make them more varied and interesting:

    (setf lhp-r (rnd-order 
                 (sort-desc lh-p :section '(7 9 10 11 )) 
                 :section '(3 4 8) :seed 761))


    As we've been so careful to organise the bar/list structure, putting in the dynamics is very straightforward.

    (setf dyn-rh
          '((f) (mp) (mf) (f) (mf) (ff) (mp) (mf) (mp) (f)
            (ff) (p) (mp mf f ff) (f) (f) (mf) (mp) (p mp f fff)))

    Notice how the crescendo has been created in the last bar of the rh-2 part. This whole process is then repeated in the left hand but with a different random sampling of the transposed-rows and a different scaling using INTERVAL-SCALE2.


    ;; Material - rhythm
    (setf r1 '(s s s s)
          r2 '(e e)
          r3 '(e s s)
          r4 '(s s e) 
          r5 '(-e e e e)
          r6 '(-q h)
          r7 '(5q 5q 5q 5q 5q)
          r8 '(e e e)
          r9 '(e e e q)
          r10 '(q q q -q)
          r11 '(6q 6q 6q 6q 6q 6q)
          r12 '(q q q q)
          r13 '(3q 3q 3q)
          r14 '(5h 5h 5h 5h 5h)
          r15 '(-q)
          r16 '(e q q e)
          r17 '(e q e)
          r18 '(q h q)
          r19 '(e e q q)
          r20 '(q q -q)
          r21 '(-e s s)
          r22 '(-e q.)
          r23 '(q h)
          r24 '(h)
          r25 '(q))
    (setf rh
           '((r1 r1 r2) (r6) (r15 r1 r8) (r9) (r10)
             (r18) (r15 r15 r2) (r20) (r5 r2 r3)
             (r21 r1 r7) (r11 r22) (r1 r1 r1)
             (r12)(r15 r13 r13) (r13 r15 r13) (r14 r15)
             (r15 r17) (r2 r2))))
    (setf lh
           '((r15 r2 r1) (r23) (r1 r1 r8) (r9) (r24 r1 r1)
             (r18) (r2 r25 r25) (r2 r2 r2) (r1 r1 r1 r4)
             (r2 r2 r2) (r25 r22) (r15 r15 r1) (r1 r1 r25 r25)
             (r2 r2 r2) (r16)(r16) (r15 r17) (r24))))
    ;; Material - pitch
    ;; Right hand
    (setq row (pcs '4-9))
    (setf transposed-rows-r (pcs-transpose (gen-integer 0 11) (gen-repeat 12 (list row))))
    (setf scaled-intervals-r (interval-scale 0.75 (rnd-sample (length lh) transposed-rows-r :seed 34)))
    (setf rhy-to-rh (span rh scaled-intervals-r))
    (setf rh-p (pitch-transpose 12 (integer-to-pitch rhy-to-rh)))
    (setf rhp-r (rnd-order rh-p :section '(0 2 3 6 7 11 17) :seed 76))
    ;; Left hand
    (setf transposed-rows-l 
          (pcs-transpose (gen-integer 0 11) (gen-repeat 12 (list row))))
    (setf scaled-intervals-l 
          (interval-scale2  '(0.5 1.0)
             (rnd-sample (length lh) transposed-rows-l :seed 36)))
    (setf rhy-to-lh (span rh scaled-intervals-l))
    (setf lh-p (pitch-transpose -12 (integer-to-pitch rhy-to-lh)))
    (setf lhp-r
           (sort-desc lh-p :section '(7 9 10 11)) 
           :section '(3 4 8) :seed 761))
    ;; Dynamics
    (setf dyn-rh
          '((f) (mp) (mf) (f) (mf) (ff) (mp) (mf) (mp) (f) (ff)
            (p) (mp mf f ff) (f) (f) (mf) (p) (p mp f fff)))
    (setf dyn-lh
          '((mf) (mp f) (mf) (f) (mf f) (ff) (mf) (f) (f) (p) (f)
            (mp) (mp) (mf p) (f) (f) (p) (mf)))
    (setf rh-1
           :length rh
           :pitch rhp-r
           :velocity dyn-rh))
    (setf rh-2
          '((s g5 f fs5 d5 g5 fs5 g5 d5 d5 e d5 fs5) (-q h e5 mp)
            (-q s d5 g5 ds5 d5 e g5 e4 ds5) (e f4 f e4 a4 q as4)
            (q fs4 f4 as4 -) (q as4 ff h a4 q f4) (-q - e e4 mp c5)
            (q e5 a4 -) (-e e5 mp f5 c5 cs5 e5 f5 s c5 cs5)
            (-e s gs5 f gs5 ds5 e5 gs5 gs5 5q ds5 e5 gs5 gs5 ds5)
            (3e fs5 ff g5 d5 d5 fs5 g5 -e q. d5)
            (s gs5 p g5 g5 a4 a4 gs5 d5 d5 a4 gs5 g5 d5)
            (q gs4 mp mf e4 f c5 ff) (-q 3q g4 f fs4 b4 as4 g4 fs4)
            (3q e4 f c5 gs4 -q 3q gs4 e4 c5) (5h f4 e4 as4 a4 f4 -q)
            (-q e f4 p< q e4 <  e as4 <) (e d5 < g5 < fs5 < d5 fff)))
    (setf lh-1
           :length lh
           :pitch lhp-r
           :velocity dyn-lh))
    (setf lh-2
          '((-q e ds3 f3 s c3 cs3 ds3 f3) (q fs3 mp h f)
            (s d3 e3 a3 c3 d3 e3 a3 d3 e e3 a3 c3) (e e2 f d3 cs2 q ds3)
            (h b2 s as2 f2 mf b2 as2 f2 b2 as2 f2)
            (q gs2 ff h f2 q a2) (e g2 f2 q g2 f2) (e g3 f gs2 g3 gs2 g3 gs2)
            (s e3 f e3 ds3 e3 g3 ds3 g3 e3 tie e e3 s ds3 e3 g3 ds3 e g3)
            (e f3 p f3 tie f3 ds3 tie q ds3) (q gs3 f -e q. fs3)
            (-q - s fs3 mp fs3 fs3 fs3 tie)
            (s fs3 mp c3 e3 fs2 fs3 c3 e3 fs2 q fs3 c3)
            (e as2 gs2 p ds2 mf c3 p as2 mf gs2 p) (e b2 f q as2 f2 e ds2)
            (e a2 f q g2 c3 e b2) (-q e fs2 p q c3 e gs2) (h c3)))
    (setf timesigs (get-time-signature rh-2 :group '((2 2 3))))
    (def-score lesson-23
               (:key-signature 'chromatic
                :time-signature timesigs
                :tempo '(q 85)
                :layout (piano-layout 'piano-rh 'piano-lh))
       :omn rh-2
       :channel 1
       :sound 'gm
       :program 'acoustic-grand-piano)  
       :omn lh-2)


    Screen Shot 2017-12-05 at 18.06.03.png


    Next page Lesson 24. Tonality 1

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