Stephane Boussuge

Moderators
  • Content count

    370
  • Joined

  • Last visited

  • Days Won

    87

Stephane Boussuge last won the day on June 21

Stephane Boussuge had the most liked content!

1 Follower

About Stephane Boussuge

  • Rank
    Advanced Member

Contact Methods

  • Skype
    stephane.boussuge

Profile Information

  • Gender
    Male

Recent Profile Visitors

2,258 profile views
  1. Hi, could be also useful for counterpoint ! Great ! S.
  2. Last piece from 3 Images pour Violon et Piano. SB.
  3. 2nd Image from 3 Images for Violin and Piano. SB.
  4. A simple example based on an All Interval Row for pitch material and euclidean rhythm for Flute rhythmic generation. ;; All interval row generation (setf row (air 16 :prime :type :pitch)) ;;; Strings chords ;; Chords gen from Air (setf chords1 (harmonic-progression '(0 0 0 0 2 2 2 2) row :size 4 :step '(1 2 2 1) ;; step throught row :relative t ;; chords relative path voice leading :seed 8392 )) ;; Strings chords assembly with pitches from chords1 ;; and length generation (whole notes '(w) repeated 32 times) ;; dynamic = pp (setf chords1.omn (filter-tie ;; tie repeated notes (make-omn :length (gen-repeat 32 '((w))) :pitch chords1 :velocity '((pp)) ))) ;;; Melody generation for Flute ;; Get the length (size) of chords1.omn (setf size (length chords1.omn)) ;; Pitch material (setf melo1.pmat (rnd-order (melodize (gen-trim size (mclist (harmonic-progression '(0 0 0 0 2 2 2 2) row :size 5 :step '(1 2 2 1) )))))) ;; Melodic generation with euclidean rhythm (setf melo1.omn (pitch-transpose 12 (make-omn :pitch melo1.pmat :length (euclidean-rhythm (gen-repeat size '(16)) 1 12 's :type 2 ) :velocity '((mf)) ))) (def-score temp ( :key-signature 'chromatic :time-signature '(4 4) :composer "Stéphane Boussuge" :copyright "Copyright © 2017 s.boussuge" :tempo 64 ) (strings1 :omn chords1.omn :channel 1 :port 0 :sound 'gm :program 'acoustic-grand-piano :controllers (1 (gen-dynamic-controller chords1.omn)) ) (flute1 :omn melo1.omn :channel 2 :port 0 :sound 'gm :program 'acoustic-grand-piano :controllers (1 (gen-dynamic-controller melo1.omn)) ) ) SB. AudioOutput.mp3
  5. Small duet for Violin and Piano from 3 Images pour Violon et Piano. The 2 others duet are in progress. I've used some midi pre-recorded material prepared and edited in Logic before importation into Opusmodus and after import, i've processed this material with opmo functions and export back to Logic X for final edition and final score edit. SB.
  6. Hi, here's the first movement of a work in progress, my strings quartet No.1. OpmoScore attached. You can also find how it was algorithmically made in this forum article/example: SB. Sqrt1-Full-GM.opmo
  7. Hi, new piece after a paint by Egon Schiele. SB. mwploaFullScoreEdit.opmo (update)
  8. You can also have a look to LSytem functions.... length-lsystem pitch-lsystem rewrite-lsystem S.
  9. i've used Opusmodus a bit last year with Ableton live without problems but may be something change on new version... Attached, the setup i've used at this time. Just in case if it could help .... SB. OpmoMidiSetupLive.als
  10. Hi, maybe this little example could help a bit: (setf pitch (gen-trim 128 '(c4 d4 e4 f4 g4 a4 b4 c5 d5 e5 f5 g5))) (setf len1 (gen-length (rnd-sample 32 '(2 4 6 8)) '16)) (setf len2 (gen-length (rnd-sample 32 '(2 4 6 8)) '16)) (setf len3 (gen-length (rnd-sample 32 '(2 4 6 8)) '16)) (setf len4 (gen-length (rnd-sample 32 '(2 4 6 8)) '16)) (setf align (distribute-seq pitch len1 len2 len3 len4)) (setf p1 (make-omn :pitch (1~ align) :length len1 )) (setf p2 (make-omn :pitch (2~ align) :length len2 )) (setf p3 (make-omn :pitch (3~ align) :length len3 )) (setf p4 (make-omn :pitch (4~ align) :length len4 )) (def-score temp ( :key-signature 'chromatic :time-signature '(4 4) :composer "Stéphane Boussuge" :copyright "Copyright © 2017 s.boussuge" :tempo 120 ) (inst1 :omn p1 :channel 1 :sound 'gm :program 'acoustic-grand-piano ) (inst2 :omn p2 :channel 2 :sound 'gm :program 'acoustic-grand-piano ) (inst3 :omn p3 :channel 3 :sound 'gm :program 'acoustic-grand-piano ) (inst4 :omn p4 :channel 4 :sound 'gm :program 'acoustic-grand-piano ) ) SB
  11. Thank you André. I've made that based on you code for replace pitch on technique: ;;; REPLACE-PITCH-OF-A-TECHNIQUE ;;; Based on code from AM. (replace-velocity-of-a-technique) (defun replace-pitch-of-a-technique (omn-list &key technique pitch) (flatten (loop for i in (single-events omn-list) when (equal (nth 3 i) technique) collect `(,(nth 0 i) ,(rnd-pick pitch) ,(nth 2 i) ,(nth 3 i)) else collect i))) (replace-pitch-of-a-technique '(e. c4 p tasto d4 ponte e4) :technique 'tasto :pitch '(g6)) (replace-pitch-of-a-technique '(e. c4 p tasto d4 ponte e4 d4 tasto f5 tasto) :technique 'tasto :pitch '(g4 e5 a6)) S.
  12. Here's some few examples of use of the recently updated tonality-system. (complete opmo score attached to this post.) ;; Utility function useful for using ;; bass note of chords/scales as root ;; in tonality-series. (defun get-lowest-chord-tone (chords) (do-verbose ("get-lowest-chord-tone") (integer-to-pitch (mapcar 'find-min (pitch-to-integer chords))) )) #| ;;; USAGE (setf chords '(d4f4a4 ab3d4eb4g4 f4eb3c5)) (get-lowest-chord-tone chords) |# It is better now to see the tonality as kind of PCS (pitch Class Set). If you would express them in pitch, it is easier to work on C base. Something interesting if the fact tonality can now be sorted or not. It will be reflected in the output of tonality-map. ;; Some tests (tonality-map '(d4e4f4g4a4b4) '(c4 d4 e4 f4 g4 a4 b4)) (tonality-map '(d4e4f4g4a4b4) '(c3 e4g4)) (tonality-map '(d4e4f4g4a4b4 :root d4) '(c3 e4g4)) (tonality-map '((0 2 3 5 7 9 10) :root d4) '(c3 e4g4)) (tonality-map '((0 2 3 5 7 9 10) :root d4 :closest 'down) '(c3 e4g4)) More extended test with use of bass note as root: (setf row '(c4 e4 f4 b4 a4 bb4 cs4 gs4 fs4 g4 eb4 d4)) (setf modes1 (harmonic-progression '(0 1 2 3 4 5 6 7 8 9 10 11) row :step 1 :size 8 )) (setf mtv '((s c4 d4 e4 f4 g4 a4 b4 c5))) (setf test1 (tonality-map (mclist modes1) (gen-repeat 12 mtv))) (setf path1 (tonality-series modes1 :root (get-lowest-chord-tone modes1) ;:closest '(down) )) (setf test2 (tonality-map path1 (gen-repeat 12 mtv))) (setf mtv2 '((s c4 cs4 d4 ds4 e4 f4 fs4 g4))) (setf test3 (tonality-map (mclist modes1) (gen-repeat 12 mtv2))) (setf test4 (tonality-map path1 (gen-repeat 12 mtv2))) (setf path2 (tonality-series modes1 :root (get-lowest-chord-tone modes1) ;:closest '(down) :map '(step) )) (setf test5 (tonality-map path2 (gen-repeat 12 mtv))) (setf test6 (tonality-map path2 (gen-repeat 12 mtv2))) (setf path3 (tonality-series modes1 :root (get-lowest-chord-tone modes1) ;:closest '(down) :map '(step) :sort t )) (setf test7 (tonality-map path3 (gen-repeat 12 mtv2))) (setf test8 (tonality-map path3 (gen-repeat 12 mtv))) SB. NewTonalitySystemExamples.opmo
  13. I think the easy way and best way is to use my function (revised by Torsten) ADD-INTERVAL-IF-LENGTH: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;; ADD-INTERVAL-IF-LENGTH ;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; USAGE #| (setf seq '((e c4 p stacc d4 stacc e4 stacc f4 stacc q g4 g3) (q c4 mf e c6 b5 a5 g5 f5 d5) (s e4 f4 e4 d4 q g4 b4 d5) (q g5 ff marc g4 marc h c5 ))) ; with default parameters (add-interval-if-length '(1/4 c4 d4 e4 1/8 e4 f4)) (add-interval-if-length seq) ; with specified condition (add-interval-if-length seq :condition '<) (add-interval-if-length seq :condition '=) ; with specifird conditions en length value specification (add-interval-if-length seq :condition '= :length-val '1/4) |# ;;; VERSION REVISEE PAR TORSTEN ;;; ============================================== ;;; UTILITY FUNCTIONS ;;; (defun add-interval-if-length-aux (omn &key (test #'>) (length-val 1/8) (interval-list '(4 3 4 7 4 3 5 4 7 3))) (let ((s-events (single-events omn))) (loop for e in s-events for i in (gen-trim (length s-events) interval-list) when (funcall test (omn-encode (first e)) length-val) append (omn-replace :pitch (chord-interval-add (list i) (list (second e))) e) else append e))) ;(add-interval-if-length-aux '(q c4 d4 e4 f4 e g4 a4) :interval-list '(10 11)) ;;; ============================= ;;; MAIN FUNCTION (defun add-interval-if-length (omn &key (test #'>) (length-val 1/8) (interval-list '(4 3 4 7 4 3 5 4 7 3))) (do-verbose ("add-interval-if-length") (let ((test-fn (case test (> #'>) (< #'<) (= #'=) (otherwise test)))) (if (listp (car omn)) (mapcar #'(lambda (x) (add-interval-if-length-aux x :test test-fn :length-val (omn-encode length-val) :interval-list interval-list)) omn) (add-interval-if-length-aux omn :test test-fn :length-val (omn-encode length-val) :interval-list interval-list))))) ;(add-interval-if-length '((q c4 d4 e4 f4 e g4 a4) (e f4 e4 q d4 c4 a4 g4 f4)) :interval-list '(10 11)) ;(add-interval-if-length '((q c4 d4 e4 f4 e g4 a4) (e f4 e4 q d4 c4 a4 g4 h f4)) :interval-list '(3 4) :test #'>= :length-val 'q) you can setf a phrase processed first by this function and another one with another processing with the same function but with other parameters: (setf seq '((e c4 p stacc d4 stacc e4 stacc f4 stacc q g4 g3) (q c4 mf e c6 b5 a5 g5 f5 d5) (s e4 f4 e4 d4 q g4 b4 d5) (q g5 ff marc g4 marc h c5 ))) ; with default parameters (setf proc1 (add-interval-if-length seq)) (setf proc2 (add-interval-if-length proc1 :interval-list '(3 4) :test #'>= :length-val 'q)) SB.
  14. Something useful for automatic stuff generation, you can define a variable seed defined with random number and replace the value of the variable by it's value when you got an interesting result. Example: (setf seed (car (rnd-number 1 1 100000))) (init-seed seed) SB.
  15. Thank you very much Torsten ! all the best Stéphane