Jump to content

Stephane Boussuge

Moderators
  • Posts

    1,059
  • Joined

  • Last visited

Posts posted by Stephane Boussuge

  1. I've shared a video here on CHORD-DICTUM function and you will find here the code from the video.

    Enjoy !

     

     

    The Score:

     

    ;;;--------------------------------------------------------
    ;;; SCORE 186
    ;;; VARIATIONS POUR PIANO
    ;;; Etude de la fonction "chord-dictum"
    ;;; S.BOUSSUGE
    ;;; WIEN - 27.01.2024
    ;;;--------------------------------------------------------
    ;;; LEARN OPUSMODUS: WWW.COMPOSERWORKSHOP.COM
    ;;;--------------------------------------------------------
    ;;; To view the score press the Cmd-Option-1 keys.
    ;;;--------------------------------------------------------
    ;;; UTILITY
    ;;; REA-MARK
    
    (defun rea-mark (omn-exp)
      "Add rehearsal marks even on empty bars."
      (if (event-restp (nth-event 0 omn-exp))
          (position-insert 1 'reh omn-exp :section '(0))
        (edit-events '((1 1 'reh :articulation)) omn-exp)))
    
    ;;;--------------------------------------------------------
    ;;; PARAMETERS
    
    (setf seed  (rnd-round 1 1000000))
    (init-seed seed)
    
    (setf chords.p
          '(h. cs3fs3b3d4fs4bb4 q bb2eb3g3b3eb4gs4 h. cs3fs3b3d4fs4bb4 
            q fs3bb3d4f4bb4eb5 h b2c3eb3a3c4eb4gs4 q gs2cs3f3g3bb3eb4 
            h fs2bb2d3e3gs3cs4 q eb2gs2c3d3fs3bb3 h. c3eb3fs3b3d4fs4bb4c5
            q d3fs3bb3d4f4bb4f5 b2eb3fs3b3d4fs4bb4c5 g2bb2eb3g3b3cs4fs4a4
            e2gs2cs3e3g3bb3eb4f4 a2cs3fs3a3c4eb4gs4b4 f2bb2eb3g3bb3eb4f4
            h. c3eb3gs3c4e4fs4bb4d5 q a2fs3a3cs4fs4a4 d3fs3bb3d4f4bb4eb5f5
            h f3gs3cs4f4g4bb4eb5g5 f3gs3cs4f4g4bb4eb5g5 
            w f3gs3cs4f4g4bb4eb5g5))
    
    (setf rvel (rnd-sample
                (length (omn :pitch chords.p))
                '((pp)(p)(mp)(mf)(f)(ff))))
    
    (setf chords.d (omn-replace :velocity rvel chords.p))
    
    (setf
     dictum1
     '(
       (:len w :chd 7 :div 7 :vel nil :att nil 
        :grp nil :int nil :var ? :mtd m :rhy t)
       #|2|# (:len w :chd 6 :div 2 :vel nil :att nil 
              :grp 2 :int nil :var ? :mtd nil :rhy t)
       #|3|# (:len w :chd 5 :div 5 :vel nil :att nil 
              :grp nil :int nil :var ? :mtd m :rhy t)
       #|4|# (:len w :chd 4 :div 4 :vel nil :att nil 
              :grp 3 :int nil :var ? :mtd nil :rhy t)
       #|5|# (:len h. :chd 7 :div 7 :vel nil :att nil 
              :grp nil :int nil :var ? :mtd m :rhy t)
       #|6|# (:len h. :chd 6 :div 3 :vel nil :att nil 
              :grp 3 :int nil :var ? :mtd nil :rhy t)
       #|7|# (:len h. :chd 5 :div 5 :vel nil :att nil 
              :grp nil :int nil :var ? :mtd m :rhy t)
       #|8|# (:len h. :chd 4 :div 4 :vel nil :att nil 
              :grp nil :int nil :var ? :mtd m :rhy t)
       #|9|# (:len h :chd 7 :div 2 :vel nil :att nil 
              :grp 2 :int nil :var ? :mtd nil :rhy t)
       #|10|# (:len h :chd 6 :div 6 :vel nil :att nil 
               :grp 3 :int nil :var ? :mtd nil :rhy t)
       #|11|# (:len h :chd 5 :div 3 :vel nil :att nil 
               :grp 2 :int nil :var ? :mtd nil :rhy t)
       #|12|# (:len h :chd 4 :div 4 :vel nil :att nil 
               :grp nil :int nil :var ? :mtd m :rhy t)
       #|13|# (:len q :chd 7 :div 4 :vel nil :att nil 
               :grp 2 :int nil :var ? :mtd nil :rhy t)
       #|14|# (:len q :chd 6 :div 6 :vel nil :att nil 
               :grp nil :int nil :var ? :mtd m :rhy t)
       #|15|# (:len q :chd 5 :div 2 :vel nil :att nil 
               :grp 2 :int nil :var ? :mtd nil :rhy t)
       #|16|# (:len q :chd 4 :div 4 :vel nil :att nil 
               :grp nil :int nil :var ? :mtd m :rhy t)
       )
     )
    
    (setf dictum-temp
          `(list
           (rnd-sample 8 '(w h. h q))                        ; Length map
           (rnd-number 8 4 8)                                ; Chord-size map
           (rnd-number 8 3 7)                                ; Length division
           nil                                               ; Velocity map
           nil                                               ; Attribute map
           (rnd-sample 8 '((3 4) (3 4) nil))                 ; Chord group
           (rnd-sample 8 '((0 13 1 11) nil (0 6 -6 11) nil)) ; Intervals
           '?                                                ; Variant
           (rnd-sample 8 '(m r nil))                         ; Methods
           (rnd-sample 8 '(nil t t nil))                     ; Rhythm series
           ))
    
    (setf dictum2 (gen-chord-dictum (eval dictum-temp)))
    (setf dictum3 (gen-chord-dictum (eval dictum-temp)))
    
    (setf out1 (chord-dictum dictum1 chords.d))
    (setf out2 (chord-dictum dictum2 chords.d))
    (setf out3 (chord-dictum dictum3 chords.d))
    (setf out4 (chord-dictum dictum1 chords.d))
    
    (setf piano (assemble-seq chords.d out1 out2 out3 out4))
    (setf split1 (ambitus-filter '(c4 c8) piano))
    (setf split2 (ambitus-filter '(a0 b3) piano))
    
    (setf piano-rh split1)
    (setf piano-rh.rea (assemble-seq (loop for i in piano-rh 
                                           :collect (rea-mark (list i)))))
    (setf piano-lh split2)
    
    (setf titre (concatenate 
                 'string
                 "Score186-Variation-Piano-" (stringify seed) 
                 ))
    
    ;;;--------------------------------------------------------
    ;;; SCORE AND LAYOUT
    
    (def-score Score186
        (:title titre
         :subtitle "pour Piano"
         :composer "Stephane Boussuge"
         :copyright "Copyright © 2024"
         :key-signature 'chromatic
         :time-signature '((1 1 1 1) 4)
         :tempo 108
         :layout (piano-solo-layout 'piano-rh 'piano-lh))
      
      (piano-rh
       :omn piano-rh.rea
       ;:port "bus 6"
       :channel 1
       :sound 'gm
       :program 'acoustic-grand-piano
       )
      
      (piano-lh
       :omn piano-lh
       ;:port "bus 6"
       :channel 1
       )
      )
    (init-seed nil)
    
    

     

     

  2. I've made several videos lessons packs and the first one "Introduction to Opusmodus" is generally well appreciated.

     

    WWW.COMPOSERWORKSHOP.COM

    Composer Workshop Search Now Popular: Opusmodus Music Theory €35,00 Template: Infinite Variations Trio for Alto Flute, Harp and Piano Updated: November 20, 2023 All Levels 20 minutes “Infinite Variations” is a groundbreaking Opusmodus template for Alto Flute, Harp, and Piano, blending a motivic counterpoint design with advanced algorithms to generate endless unique compositions...

     

  3. On 1/19/2024 at 11:21 PM, JulioHerrlein said:

    beautiful, Stephane !
    How do you make that section numbers (1, 2, 3, ) in the score sections ?

     

    Best !

    Julio

     

    Hi Julio, i made a fonction to add rehearsal marks (reh attribute) even on empty bars. Here it is:

     

    (defun rea-mark (omn-exp)
      "Ajoute un repere de repetition meme sur les mesures vides"
      (if (event-restp (nth-event 0 omn-exp))
        (position-insert 1 'reh omn-exp :section '(0))
      (edit-events '((1 1 'reh :articulation)) omn-exp)))

     

    Stephane

  4. My function is made for normal measured material, it means you have to use parenthesis to separate bars and apply the function on it.

     

    This works:

     

    (setf mat '((w d3 mf) (s eb3 mf h... e3 tie) (s e3 mf eb3 h.. f3 tie) 
    (w f3 mf tie) (e f3 mf -h q. fs3 tie) (he fs3 mf s e3 d3 f3 e. e3 tie)
    (w e3 mf tie) (h.s e3 mf -e.) (-q -s he. d3 mf tie) (qs d3 mf s fs3 he eb3 tie)
    (q. eb3 mf s e3 fs3 eb3 d3 f3 qs fs3 tie) (w fs3 mf tie) (he. fs3 mf -q -s)
    (-e. h.s d3 mf tie) (e. d3 mf s f3 h. eb3 tie) (q eb3 mf s e3 he. d3 tie)
    (w d3 mf tie) (qs d3 mf -h e. eb3 tie) (h.s eb3 mf s e3 f3 fs3) (w g3 mf tie)
    (w g3 mf) (-h e4 mf tie) (h e4 mf s f4 q.. gs3 tie) (hs gs3 mf s fs3 e4 gs3 fs3 f4 e g3 tie)
    (w g3 mf tie) (h.. g3 mf -e) (-q. he gs3 mf tie) (q. gs3 mf s f4 hs g3 tie)
    (q.. g3 mf s fs3 h e4 tie) (w e4 mf tie) (h e4 mf -) (w f4 mf) (s fs3 mf e4 g3 h.s gs3 tie)
    (w gs3 mf tie) (e. gs3 mf -h qs fs3 tie) (he. fs3 mf s g3 q gs3 tie) (h. gs3 mf s e4 f4 f3 g3)
    (s eb4 mf h... fs3 tie) (w fs3 mf tie) (s fs3 mf -h q.. e3 tie) (hs e3 mf s g3 q. fs3 tie)
    (he fs3 mf s e3 qs eb4 tie) (w eb4 mf tie) (he. eb4 mf -q -s) (-e. h.s f3 mf tie)
    (e. f3 mf s fs3 eb4 f3 he e3 tie) (w e3 mf tie) (q. e3 mf -h e g3 tie) (h.. g3 mf s eb4 e3 tie)
    (h... e3 mf s g3) (s f3 mf fs3 e3 f3 h. fs3 tie) (w fs3 mf tie) (q fs3 mf -h q g3 tie)
    (h. g3 mf s eb4 e. a3 tie) (h.s a3 mf s fs4 e g4 tie) (w g4 mf tie) (h.. g4 mf -e)
    (-q. he f4 mf tie) (q. f4 mf s gs3 fs4 f4 q.. gs3 tie) (w gs3 mf tie) (hs gs3 mf -q..)
    (-s h... g4 mf tie) (s g4 mf a3 h.. f4 tie) (e f4 mf s g4 a3 gs3 fs4 g4 hs gs3 tie) 
    (w gs3 mf tie) (q.. gs3 mf -h s fs4 tie) (h... fs4 mf s a3) (w f4 mf)
    (s gs3 mf h... a3 tie) (w a3 mf tie) (s a3 mf -h q.. f4 tie) (hs f4 mf s fs4 g4)))
    
     
    (gen-ornament '((acc e c4 fs4)) mat :val '(w))

     

     

  5. Hi,

     

    here#s some code I wrote long time ago, may be useful for you.

     

    ;;; UTILITY FUNCTION
    (defun pitch-transpose-app-acc (trsp orn)
      " Definition d'un pitch-transpose qui supporte les symboles
      étrangers tels que app ou acc"
      (let* ((all-omn (disassemble-omn (cdr orn)))
            (pch (getf all-omn :pitch))
            (len (getf all-omn :length))
            (vel (getf all-omn :velocity))
            (art (getf all-omn :articulation))
            (apo (nth 0 orn))
            (res (cons apo
                       (make-omn
                        :pitch (pitch-transpose trsp pch)
                        :length len
                        :velocity vel
                        :articulation art
                        )))
            )
        res
        ))
    
    ;(pitch-transpose-app-acc 4 '(app s d4 e4 f4 g4))
    
    
    ;;; MAIN FUNCTION
    
    (defun gen-ornament (orn omn &key (val '(q h))(cycle t) seed)
      (let (state)
        (setf state *init-seed*)
        (setf seed (rnd-seed seed))
        (do-verbose ("gen-ornament seed: ~s" seed)
      (let*  ((events (single-events omn))
              (tsig (get-time-signature omn))
              (posi (position-item 't (mapcar 'event-restp (flatten-sublist events))))
              (res (omn-to-time-signature
                    (flatten-sublist
                     (loop
                       for e in (flatten-sublist events)
                       for o in (position-insert
                                 posi 'nil
                                 (gen-trim 
                                  (length (flatten-sublist events)) 
                                  (if cycle orn (rnd-order orn :list t :seed (seed))))
                                 :type 'list)
    
                       collect
                                 (if (member (1~ e) val)
                                   (append  (list (pitch-transpose-app-acc (pitch-to-integer (nth 1 e))  o)) e)
                                   e)))
                    tsig)
                   )
              )
        (init-state state)
        res))))
    
    
    ;;; USAGE
    #|
    (setf phrase '((h eb4 gs4)
                   (s c4 e4 g4 a4 q eb4 - e. bb4 s cs4)
                   (q. d4 s e4 eb4 q. g4 s e4 a4)
                   (-q e. f4 s e4 e. g4 s q c4)
                   (q a4 q. fs4 e c4 -q)
                   (h g4)))
    
    (setf phrase2
              '(#|1|# (q. d4 s leg s f4 def q cs4 e f4 stacc cs4 stacc)
                #|2|# (s eb4 p< leg e4 < leg d4 < leg cs4 < def h f4 f -q)
                #|3|# (q c4 f marc e d4 marc gs4 marc  q marc q c4 marc)
                #|4|# (h cs4 mp def q. g4 s fs4 p leg c4)
                #|5|# (q. eb4 mf s f4 a4 h e4)
                #|6|# (s c4 f> leg bb4 > leg f4 > leg e4 p def -q h b4 f tr1)
                ))
    
    (gen-ornament '((app s c4 fs4 f4 e4)(acc e a3 d4)) phrase)
    (gen-ornament '((acc s c4 fs4 f4 e4)) phrase :val '(q.))
    (gen-ornament '((acc s c4 fs4 f4 e4)(acc s g4 f4 e4 d4)) phrase2 :val '(h q))
    (setf test (gen-ornament '((acc t c4 fs4 f4 e4)(acc t g4 f4 e4 d4)) (pitch-transpose 12 phrase2) :val '(h q) :cycle nil))
    (setf test2 (gen-ornament '((acc t c4 fs4 f4 e4)(acc t g4 f4 e4 d4))
                              (pitch-transpose 12 phrase2) :val '(h q) :cycle nil :seed 123))
    (ps 'gm :fl (list test) :tempo 40)
    
    |#
    
    
    

    SB

×
×
  • Create New...

Important Information

Terms of Use Privacy Policy