Jump to content

Stephane Boussuge

Moderators
  • Posts

    1,058
  • Joined

  • Last visited

Everything posted by Stephane Boussuge

  1. Sorry, my mistake, I reply too quickly without thinking.... It is not chords inversion. It is the use of function length-divide internally who produce this result because length-divide apply some intervals. Look at the doc for length-divide function. If you provide intervals to the function you can modify this behavior, for example , if you want only the chords notes, you can do: (setf mat1 '((h a2b2e3f3gs3 mf) (h a2b2e3f3gs3 p) (q bb4c5gs5a5b5 mp q bb4c5gs5a5b5 p))) (chord-dictum '((:len h :chd 5 :div 5 :int '(0)) (:len q :chd 5 :div 4)) mat1 ) => ((5h a2b2e3f3gs3 mf a2b2e3f3gs3 a2b2e3f3gs3 a2b2e3f3gs3 a2b2e3f3gs3)
  2. The chords are randomly inverted to add variety but keep the harmonic content. If you want to alter the pitch, you can use interval transposition in dictum.
  3. New video exploring the fabulous new Opusmodus function "chord-dictum".
  4. 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)
  5. Opusmodus Chord-Dictum variations example. Learn Opusmodus: www.composerworkshop.com
  6. I've made several videos lessons packs and the first one "Introduction to Opusmodus" is generally well appreciated. Distance Learning - Composer Workshop 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...
  7. The flute is VSL Flute hosted in VCV (paying option in vcv...) S.
  8. 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
  9. 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))
  10. Here's the code. The original material was play by myself on piano and imported to OM as midi file then processed by OM. AfterTheClub.opmo
  11. 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
  12. New score , "Sur le fil" for flute and piano Sur le fil - Edit 2.wav
  13. No, that's the same on Mac you evaluate and have to press start to hear.
  14. What I call "scenes" are the .opmo files/score into your workspace. You can create one for introduction and another for part B , another one for a transition to another one part c for example, all with different process and algorithms. When you do your Live-coding sessions you can switch from one of this .opmo file to another one evaluating and tweaking them.
  15. the good thing when using live coding in one workspace with several scores is you can use the multiples scores like "scenes" and switch from one scene to other in real time.
  16. Raw algorithmic output from OM for my score "Eclat pour petit ensemble"
  17. Oui, cette pièce est librement inspirée des techniques utilisées dans le pack 5 OM lessons de composerworkhop et contient possiblement des fonctions créées pour l’occasion.
  18. def-score is the best and optimal way in OM. PS is more for drafting, sketching, better to use def-score in this case.
  19. Depend on which instrument plugin you send it because OM use MTS for microtonality and not all library support it. for example in VSL, it works with VI Series but not with Synchron Series....
  20. Hi Tom, I generally use Plogue Bidule to solve this. Best Stephane
×
×
  • Create New...

Important Information

Terms of Use Privacy Policy