Jump to content

Stephane Boussuge

Moderators
  • Posts

    1,074
  • Joined

  • Last visited

Everything posted by Stephane Boussuge

  1. Some SoundBanks like XSample chamber Ensemble use two Keyswitch. i attach here my soundset for EWSO, i use them every days. i never share them because they are sometimes incomplete but could help you... SB. EWSOSoundsetSB.zip
  2. you can assemble your sections with assemble-seq function and use do-timeline for processing the resulting sections. Another possibility is to compile your final score(s) to a unique file with compile functions with keywords :output :score and :file "thenameofmyfile.opmo" and use the resulting omn score for re-insert material in a new score with setf and process this material. SB.
  3. May be this could be help: It show how to assemble multiple def-score.
  4. This book extend the concept to 3D tonnetz. Quite interesting but very complicated. http://dmitri.mycpanel.princeton.edu/geometry-of-music.html SB.
  5. Hi Wim, i have made some test not really on neo-riemannian style but a bit connected to this idea. I have tried to "navigate" form chord to chord with horizontal trajectory made with the Opusmodus function gen-tendency. Here's my attempt: ;;; Chords Trajectory ;;; ======================================== (setf base-chords '(c4e4g4c5 f4a4c5f5 d4fs4a4d5 g4b4d5g5)) ;; Extract horizontal pitch lines from base-chords (setf base-chords.v1 (pitch-demix 1 base-chords)) (setf base-chords.v2 (pitch-demix 2 base-chords)) (setf base-chords.v3 (pitch-demix 3 base-chords)) (setf base-chords.v4 (pitch-demix 4 base-chords)) ;; transpose them two octave up for greater than zero values (setf base-chords.v1.t (pitch-transpose 24 base-chords.v1)) (setf base-chords.v2.t (pitch-transpose 24 base-chords.v2)) (setf base-chords.v3.t (pitch-transpose 24 base-chords.v3)) (setf base-chords.v4.t (pitch-transpose 24 base-chords.v4)) ;; tendency trajectory with variance 0 (setf td-steps 4) (setf td-n (* (length base-chords) td-steps)) (setf v1.td (mapcar 'round (gen-tendency td-n (pitch-to-integer base-chords.v1.t) :variance 0))) (setf v2.td (mapcar 'round (gen-tendency td-n (pitch-to-integer base-chords.v2.t) :variance 0))) (setf v3.td (mapcar 'round (gen-tendency td-n (pitch-to-integer base-chords.v3.t) :variance 0))) (setf v4.td (mapcar 'round (gen-tendency td-n (pitch-to-integer base-chords.v4.t) :variance 0))) ;; convert back to pitch (setf v1.td.p (integer-to-pitch v1.td)) (setf v2.td.p (integer-to-pitch v2.td)) (setf v3.td.p (integer-to-pitch v3.td)) (setf v4.td.p (integer-to-pitch v4.td)) ;; back to chords (setf re-chords (pitch-transpose -24 (pitch-mix (apply-eval '(v1.td.p v2.td.p v3.td.p v4.td.p))))) ;; closest path (setf re-chords.closest (chord-closest-path (list (car re-chords)) re-chords)) ;; relative path (setf re-chords.relative (chord-relative-path (list (car re-chords)) re-chords)) Thank you for the videos links, very interesting. SB.
  6. Thank you very much André !! Great function and very useful ! Stéphane
  7. Hi André, i would love to have the om-component-replace function if you have finished it and agree for share it here . Best wishes Stéphane
  8. Tom, this script was just an example of chord morphing for inspiring you in your own scripts. The idea was not to just copy and paste it but more to understand it as an Opusmodus lesson example. Anyway, i attached it here with a def-score, this way you can evaluate it and play it directly. SB ttChordPath.opmo
  9. Tom, you tried to evaluate the score ttchordpath who has no def-score inside it. I gave it to you as an script example but it is not a score (no score def) and btw you need to evaluate each line one after the other or evaluate all but don't use evaluate and play because Opusmodus can't play a score not defined ;-) Stephane
  10. (position-insert 2 '((g8 g3 g6)) '(c4 c4 c4 c4 c4)) => (c4 c4 (g8 g3 g6) c4 c4 c4) S.
  11. Hi, Attached is a simple example of using spectra from a sound mapped on the content of a piece for woodwinds. SB. Spectral-remap1.opmo
  12. i think POSITION-INSERT can do what you want. Example: (position-insert '((2 3 4)) '((a d a)) '((a (d) c))) => ((a (d) a d a c)) (position-insert '((2 3 4)) '(((a d a))) '((a (d) c))) => ((a (d) (a d a) (a d a) (a d a) c)) (position-insert '(2 3 4) '(((a d a))) '((a (d) c))) => ((a (d) (a d a) c)) Please, have a look to the documentation of POSITION-INSERT and to my example and let me know if it's works for your need. SB.
  13. Something like that using conditionnal "if" : (defun consxp (rang item lis &key (option1 a) (option2 a)) ...... (cond ( ( and ( listp item ) (hassublistp oldlist )) (if (equal option1 a) (append (list-diff oldlist newlist ) (list item) (nthcdr rang oldlist )) (append (list-diff oldlist newlist ) item (nthcdr rang oldlist )))) (( and ( atom item ) (hassublistp oldlist )) (if (equal option2 a) (append (list-diff oldlist newlist ) (cons (list item) (nthcdr rang oldlist )))) (append (list-diff oldlist newlist ) (cons item (nthcdr rang oldlist )))) ........
  14. Hi, i've made an example of song generator/constructor for one of my Opusmodus student. I share it here if it could be useful to somebody. SB. SongConstructExample.opmo
  15. A better and more refined version. Attached, the Final score (from Dorico but first imported into Sibelius and after to Dorico because Dorico won't recall the opmo dynamics marks...). ;;; UTILITY ;;; ------------------------------------------------------------------------------ ;;; GEN-PITCH-LINE ;;; Fonction de génération de hauteurs basées sur une conversion de vecteur de bruit ;;; avec un grand choix de type de bruit, taux de compression du vecteur, filtrage des répétitions et ambitus. (defun gen-pitch-line (nb-pitch &key (compress 1) (ambitus '(c4 c6)) seed filter-repeat (type :white)) (let (pitches) (do-verbose ("gen-pitch-line") (rnd-seed seed) (labels ((white-or-pink (nb-pitch seed type) (if (eq type ':pink) (gen-pink-noise nb-pitch :seed seed) (gen-white-noise nb-pitch :seed seed :type (if (eq type ':white) :normal type)))) (process (nb-pitch &key (compress 1) (ambitus '(c4 c6)) seed filter-repeat type) (setf pitches (vector-to-pitch ambitus (vector-smooth compress (white-or-pink nb-pitch seed type)))) (when filter-repeat (setf pitches (gen-trim nb-pitch (filter-repeat filter-repeat pitches)))) pitches) ) (process nb-pitch :compress compress :ambitus ambitus :filter-repeat filter-repeat :seed (seed) :type type))))) ;;;--------------------------------------------------------- ;;; Parameters ;;;--------------------------------------------------------- ;;; Global size (setf size 42) ;;; Global random seed init (init-seed 392) ;;; Harmonic content definition ;; Base row (setf row (rnd-row :type :pitch :transpose 2)) ;; Extract scales from row (setf sc (gen-chord 12 7 7 0 0 (gen-trim 14 row))) ;; Harmonic rhythm to apply for the piece (setf hry '(4 4 2 2 1 1 2 2 3 3)) ;;; Generation of rhythmic cells reservoir (setf ryres (euclidean-rhythm (gen-trim 8 '(16)) '(1) '(16) 's :type 2 )) ;;; Generation of pitch contours reservoir (setf pres (gen-divide 16 (gen-pitch-line 64 :compress 0.24))) ;;; 2 global control vectors (setf vc1 (gen-white-noise size)) (setf vc2 (gen-white-noise size)) ;;; Choose pitch in pitch reservoir based on vector (setf pch1 (vector-map pres vc1)) (setf pch2 (pitch-transpose -12 (vector-map pres vc2))) ;;; Choose rhythmic cells in rhythm reservoir based on control vector (setf r1 (vector-map ryres vc1)) (setf r2 (vector-map ryres vc2)) ;;; definition of dynamics and articulation reservoir (setf bvel '((pp)(p)(mp)(mf)(f)(ff))) (setf bart '((-)(-)(-)(marc)(-)(stacc)(-)(-))) ;;; Choose dynamics based on control vector (setf v1 (vector-map bvel vc1)) ;;; Choose articulation based on control vector (setf art1 (vector-map bart vc1)) (setf art2 (vector-map bart vc2)) ;;; Chordize pitch when length = 1/4 or 1/2 (setf chp1 (length-chordize-map '((1/4 2)(1/2 2)) pch1 r1 )) (setf chp2 (length-chordize-map '((1/4 2)(1/2 2)) pch2 r2 )) ;;; OMN assembly and harmonic remapping with tonality map whith harmonic rhythm (:time hry) (setf p1a (filter-tie (ambitus-chord 12 (tonality-map (mclist sc) (chord-interval-replace '(1 2) '(4 8) (make-omn :pitch chp1 :length r1 :velocity v1 :articulation art1 )) :time hry)))) (setf p1b (ambitus '(c2 c4) (filter-tie (ambitus-chord 12 (tonality-map (mclist sc) (chord-interval-replace '(1 2) '(4 8) (make-omn :pitch chp2 :length r2 :velocity v1 :articulation art2 )) :time hry))))) ;;; Coda chords (setf p2a '((w eb5a5 f))) (setf p2b '((w d4bb4 f))) ;;; Assemble part1 and part2 (coda) (setf piano-rh (assemble-seq p1a p2a)) (setf piano-lh (assemble-seq p1b p2b)) ;;;--------------------------------------------------------- ;;; Score and Layout ;;;--------------------------------------------------------- (def-score snippet (:title "Snippet for Piano" :composer "S.Boussuge" :copyright "Copyright © 2016 s.boussuge " :key-signature 'chromatic :time-signature '((1 1 1 1) 4) :tempo 100 :layout (piano-solo-layout 'piano-rh 'piano-lh)) (piano-rh :omn piano-rh :channel 1 :sound 'gm :program 'acoustic-grand-piano :volume 100 :pan 64 :controllers (91 '(48)) ) (piano-lh :omn piano-lh :channel 2 :controllers (91 '(48)) ) ) SB. SnippetForPiano Partition complète.pdf
  16. Hi, here's a small piece for piano as an example of different process like tonality mapping, harmonic rhythm, rhytm and pitch cells etc.. ;;; UTILITY ;;; ------------------------------------------------------------------------------ ;;; GEN-PITCH-LINE ;;; Fonction de génération de hauteurs basées sur une conversion de vecteur de bruit ;;; avec un grand choix de type de bruit, taux de compression du vecteur, filtrage des répétitions et ambitus. (defun gen-pitch-line (nb-pitch &key (compress 1) (ambitus '(c4 c6)) seed filter-repeat (type :white)) (let (pitches) (do-verbose ("gen-pitch-line") (rnd-seed seed) (labels ((white-or-pink (nb-pitch seed type) (if (eq type ':pink) (gen-pink-noise nb-pitch :seed seed) (gen-white-noise nb-pitch :seed seed :type (if (eq type ':white) :normal type)))) (process (nb-pitch &key (compress 1) (ambitus '(c4 c6)) seed filter-repeat type) (setf pitches (vector-to-pitch ambitus (vector-smooth compress (white-or-pink nb-pitch seed type)))) (when filter-repeat (setf pitches (gen-trim nb-pitch (filter-repeat filter-repeat pitches)))) pitches) ) (process nb-pitch :compress compress :ambitus ambitus :filter-repeat filter-repeat :seed (seed) :type type))))) ;;;--------------------------------------------------------- ;;; Parameters ;;;--------------------------------------------------------- ;;; Global size (setf size 42) ;;; Global random seed init (init-seed 392) ;;; Harmonic content definition ;; Base row (setf row (rnd-row :type :pitch :transpose 2)) ;; Extract scales from row (setf sc (gen-chord 12 7 7 0 0 (gen-trim 14 row))) ;; Harmonic rhythm to apply for the piece (setf hry '(4 4 2 2 1 1 2 2 3 3)) ;;; Generation of rhythmic cells reservoir (setf ryres (euclidean-rhythm (gen-trim 8 '(16)) '(1) '(16) 's :type 2 )) ;;; Generation of pitch contours reservoir (setf pres (gen-divide 16 (gen-pitch-line 64))) ;;; 2 global control vectors (setf vc1 (gen-white-noise size)) (setf vc2 (gen-white-noise size)) ;;; Choose pitch in pitch reservoir based on vector (setf pch1 (vector-map pres vc1)) (setf pch2 (pitch-transpose -12 (vector-map pres vc2))) ;;; Choose rhythmic cells in rhythm reservoir based on control vector (setf r1 (vector-map ryres vc1)) (setf r2 (vector-map ryres vc2)) ;;; definition of dynamics and articulation reservoir (setf bvel '((pp)(p)(mp)(mf)(f)(ff))) (setf bart '((-)(-)(-)(marc)(-)(stacc)(-)(-))) ;;; Choose dynamics based on control vector (setf v1 (vector-map bvel vc1)) (setf v2 (vector-map bvel vc2)) ;;; Choose articulation based on control vector (setf art1 (vector-map bart vc1)) (setf art2 (vector-map bart vc2)) ;;; Chordize pitch when length = 1/4 or 1/2 (setf chp1 (length-chordize-map '((1/4 2)(1/2 2)) pch1 r1 )) (setf chp2 (length-chordize-map '((1/4 2)(1/2 2)) pch2 r2 )) ;;; OMN assembly and harmonic remapping with tonality map whith harmonic rhythm (:time hry) (setf p1a (ambitus-chord 12 (tonality-map (mclist sc) (make-omn :pitch chp1 :length r1 :velocity v1 :articulation art1 ) :time hry))) (setf p1b (ambitus-chord 12 (tonality-map (mclist sc) (make-omn :pitch chp2 :length r2 :velocity v2 :articulation art2 ) :time hry))) ;;; Coda chords (setf p2a '((w eb5a5 f))) (setf p2b '((w d4bb4 f))) ;;; Assemble part1 and part2 (coda) (setf piano-rh (assemble-seq p1a p2a)) (setf piano-lh (assemble-seq p1b p2b)) ;;;--------------------------------------------------------- ;;; Score and Layout ;;;--------------------------------------------------------- (def-score snippet (:title "Snippet for Piano" :composer "S.Boussuge" :copyright "Copyright © 2016 s.boussuge " :key-signature 'chromatic :time-signature '((1 1 1 1) 4) :tempo 100 :layout (piano-solo-layout 'piano-rh 'piano-lh)) (piano-rh :omn piano-rh :channel 1 :sound 'gm :program 'acoustic-grand-piano :volume 100 :pan 64 :controllers (91 '(48)) ) (piano-lh :omn piano-lh :channel 2 :controllers (91 '(48)) ) ) SB.
  17. Hi, In the attachment (score) you will find more complete and usable version of the section script of LeDuc in GM - all the dependancies are included in the score file. Happy study !! SB. LeDuc2.opmo
  18. a bit more advance on this way: ;;;; Adding neighbour tone to triads (setf source '(c4 d4 e4 f4 g4 a4 b4)) (pattern-map '(((3)(2 3)) ((4)(3 4)) ((7)(6 7)) ) source :pcs t ) ;; a possible approach (setf base-trsp (car (sort-asc (pitch-to-integer source)))) (setf base-mtrsp (* -1 base-trsp)) (pattern-map '(((3)(2 3)) ((4)(3 4)) ((7)(6 7)) ) (pitch-transpose base-mtrsp source) :pcs t ) ;; trying to do some function with that idea (defun add-neighbour-pitch (map source &key (filter-repeat 1)) (let* ((base-trsp (car (sort-asc (pitch-to-integer source)))) (re-base (* -1 base-trsp)) ) (filter-repeat filter-repeat (pitch-transpose base-trsp (pattern-map map (pitch-transpose re-base source) :pcs t ))))) (setf map '(((3)(2 3)) ((4)(3 4)) ((7)(6 7)) )) ; the problem here is we can use it only on 1 octave (because pcs use) (add-neighbour-pitch map '(d4 e4 f4 g4 a4 b4 c5 d5 e5 f5 g5 a5)) ; may be a better approach could be not using the pcs (defun add-neighbour-pitch2 (map source &key (filter-repeat 1)) (let* ((base-trsp (car (sort-asc (pitch-to-integer source)))) (re-base (* -1 base-trsp)) ) (filter-repeat filter-repeat (pitch-transpose base-trsp (integer-to-pitch (pattern-map map (pitch-to-integer (pitch-transpose re-base source)) )))))) (setf map '(((3)(2 3)) ((15)(14 15)) ((4)(3 4)) ((16)(15 16)) ((7)(6 7)) ((19)(18 19)) )) (add-neighbour-pitch2 map '(d4 e4 f4 g4 a4 b4 c5 d5 e5 f5 g5 a5)) SB.
  19. i am probably wrong, but may be it could be easier to use another approach than tonality-map for achieve this. A pattern matching on pitch class could be a solution, search for triadic unit and add lower or upper chromatic notes: (setf source1 '(c4 d4 e4 f4 g4 a4 b4)) (pattern-map '(((3)(2 3)) ((4)(3 4)) ((7)(6 7)) ) source1 :pcs t ) naturally, if the input source is not based on C, we need to find a way first to transpose it to C , do the pattern matching with chromatics and transpose another time the output of pattern-match to the original base of the input. It is just an idea, may be not help you.... SB.
×
×
  • Create New...

Important Information

Terms of Use Privacy Policy