Jump to content

opmo

Administrators
  • Posts

    2,889
  • Joined

  • Last visited

Reputation Activity

  1. Like
    opmo got a reaction from erka in Opusmodus 3.0.29046 Update   
    Thanks to Sungmin's support and the introduction of the new DEF-SC-SCORE macro, Opusmodus users can now create a series of instruments similar to those created with the DEF-SCORE macro for traditional instrument scores.
     
    The primary objective of the DEF-SC-SCORE was to enable users to take Opusmodus scores (whether in omn-form or single-element omn forms) and convert them to the CL-Collider (SuperCollider) input format. To achieve this, we introduced the OMN-TO-SC function specifically for this task.
     
    Below are a few examples that illustrate the conversion process and the use of the DEF-SC-SCORE macro:
     
    Example 1:

    DEFSYNTH:
    (sc:defsynth snd2 ((dur 2.0) (vel 1.0) (left 10) (right 10) (index-low 4) (index-high 12)) (let* ((trigger (sc:impulse.kr (list left right))) (pitch (round (sc:t-rand.kr 36 72 trigger) 1)) (timbre (sc:lf-noise0.kr 1/20 0.2 2)) (env (* 1.0 (sc:env-gen.kr (sc:perc .0 (* 2.0 dur)) :act :free) (sc:linen.kr trigger 0.0 vel (/ 1 (list left right))))) (index (+ (* env index-high) index-low)) (pitch (sc:midicps pitch)) (out (sc:pm-osc.ar pitch (* pitch timbre) index 0 env))) (sc:out.ar 0 out))) (sc:defsynth pm-crotale ((note 60) (dur 2.0) (vel 1.0) (pan 0)) (declare (ignore amp)) (let* ((freq (sc:midicps (+ 0 note))) (envl (sc:perc 0 (* 4.0 dur))) (mod! (+ 5 (/ 1 (sc:i-rand.ir 2 6)))) (out (sc:pm-osc.ar freq (* mod! freq) (sc:env-gen.kr envl :time-scale (* 4.0 dur) :level-scale vel) 0 (sc:env-gen.kr envl :time-scale (* 4.0 dur) :level-scale 0.3))) (out (sc:pan2.ar out pan)) (out (* out (sc:env-gen.kr envl :time-scale (* 1.3 (* 4.0 dur)) :level-scale (sc:rand.ir 0.1 0.4) :act :free)))) (sc:out.ar 0 out)))
    OMN Score:
    (setf size 120) (setf vector       (list-plot        (gen-sine         size 1 '(0.5 0.4 0.3 0.6)         :modulation (gen-sine size 1 0.3 :phase 180))))          (setf pitch (vector-to-pitch '(g1 g6) vector)) (setf pitch1 (gen-divide 4 pitch)) (setf pitch-transp (pitch-transpose -12 pitch1)) (setf section (rnd-unique 15 (gen-integer 0 27))) (setf pitch2 (pitch-variant pitch-transp :variant '? :section section)) (setf length1 (rnd-sample size '(s e s s))) (setf span (get-span length1)) (setf length2 (length-span span (rnd-sample size '(s e s s)))) (setf len-sum (list (sum (abs! length1)))) (setf dynamic1 (rnd-sample size '(p mp mf f ff))) (setf dynamic2 (rnd-sample size '(p mp mf f ff))) (setf omn1 (make-omn :length length1 :pitch pitch1 :velocity dynamic1)) (setf omn2 (make-omn :length length2 :pitch pitch2 :velocity dynamic2))  
    DEF-SC-SCORE:
    (def-sc-score example1     (:tempo 120      :layout ((in1 . len1) (in2 . len2) (in3 . len-sum)))   (in1 :synth pm-crotale        :note midi1        :dur len1        :vel vel1        :pan (gen-loop size (rnd1)))   (in2 :synth pm-crotale        :note midi2        :dur len2        :vel vel2        :pan (gen-loop size (rnd1)))   (in3 :synth snd2        :note '(60)        :dur length-sum        :vel '(0.1))   )  
     
    Example 2:
     
    DEFSYNTH:
    (sc:defsynth pm-crotale ((note 60) (dur 2.0) (vel 1.0) (pan 0))   (declare (ignore amp))   (let* ((freq (sc:midicps (+ 0 note)))          (envl (sc:perc 0 (* 4.0 dur)))          (mod! (+ 5 (/ 1 (sc:i-rand.ir 2 6))))          (out (sc:pm-osc.ar freq                             (* mod! freq)                             (sc:env-gen.kr envl                                            :time-scale (* 4.0 dur)                                            :level-scale vel)                             0                             (sc:env-gen.kr envl                                            :time-scale (* 4.0 dur)                                            :level-scale 0.3)))          (out (sc:pan2.ar out pan))          (out (* out                  (sc:env-gen.kr envl                                 :time-scale (* 1.3 (* 4.0 dur))                                 :level-scale (sc:rand.ir 0.1 0.4)                                 :act :free))))     (sc:out.ar 0 out)))  
    OMN Score:
    (setf chrom '(c4 cs4 d4 ds4 e4 f4 fs4 g4 gs4 a4 bb4 b4)) (setf chords (gen-chord-series chrom chrom :method 1 :type '? :segment '?)) (setf size (length chords)) (setf length (rnd-sample size '(w h q -q)))  
    DEF-SC-SCORE:
    (def-sc-score example2 (:tempo 102 :layout ((ins . length))) (ins :synth pm-crotale :note (omn-to-sc :midi chords) :dur length :vel (gen-loop size (rnd1))) )  
    To see more CL-Collider (SuperCollider) examples and understand the usage of the DEF- SC-SCORE macro, please follow these steps:
     
    Navigate to the Assistant navigator.
    Press the (D) icon.
    Look for the 'CL-Collider Examples' folder. Open the 'CL-Collider.opmo' file.
     
    Happy coding,
    Janusz
  2. Like
    opmo got a reaction from Jorgalad in Opusmodus 3.0.29046 Update   
    Thanks to Sungmin's support and the introduction of the new DEF-SC-SCORE macro, Opusmodus users can now create a series of instruments similar to those created with the DEF-SCORE macro for traditional instrument scores.
     
    The primary objective of the DEF-SC-SCORE was to enable users to take Opusmodus scores (whether in omn-form or single-element omn forms) and convert them to the CL-Collider (SuperCollider) input format. To achieve this, we introduced the OMN-TO-SC function specifically for this task.
     
    Below are a few examples that illustrate the conversion process and the use of the DEF-SC-SCORE macro:
     
    Example 1:

    DEFSYNTH:
    (sc:defsynth snd2 ((dur 2.0) (vel 1.0) (left 10) (right 10) (index-low 4) (index-high 12)) (let* ((trigger (sc:impulse.kr (list left right))) (pitch (round (sc:t-rand.kr 36 72 trigger) 1)) (timbre (sc:lf-noise0.kr 1/20 0.2 2)) (env (* 1.0 (sc:env-gen.kr (sc:perc .0 (* 2.0 dur)) :act :free) (sc:linen.kr trigger 0.0 vel (/ 1 (list left right))))) (index (+ (* env index-high) index-low)) (pitch (sc:midicps pitch)) (out (sc:pm-osc.ar pitch (* pitch timbre) index 0 env))) (sc:out.ar 0 out))) (sc:defsynth pm-crotale ((note 60) (dur 2.0) (vel 1.0) (pan 0)) (declare (ignore amp)) (let* ((freq (sc:midicps (+ 0 note))) (envl (sc:perc 0 (* 4.0 dur))) (mod! (+ 5 (/ 1 (sc:i-rand.ir 2 6)))) (out (sc:pm-osc.ar freq (* mod! freq) (sc:env-gen.kr envl :time-scale (* 4.0 dur) :level-scale vel) 0 (sc:env-gen.kr envl :time-scale (* 4.0 dur) :level-scale 0.3))) (out (sc:pan2.ar out pan)) (out (* out (sc:env-gen.kr envl :time-scale (* 1.3 (* 4.0 dur)) :level-scale (sc:rand.ir 0.1 0.4) :act :free)))) (sc:out.ar 0 out)))
    OMN Score:
    (setf size 120) (setf vector       (list-plot        (gen-sine         size 1 '(0.5 0.4 0.3 0.6)         :modulation (gen-sine size 1 0.3 :phase 180))))          (setf pitch (vector-to-pitch '(g1 g6) vector)) (setf pitch1 (gen-divide 4 pitch)) (setf pitch-transp (pitch-transpose -12 pitch1)) (setf section (rnd-unique 15 (gen-integer 0 27))) (setf pitch2 (pitch-variant pitch-transp :variant '? :section section)) (setf length1 (rnd-sample size '(s e s s))) (setf span (get-span length1)) (setf length2 (length-span span (rnd-sample size '(s e s s)))) (setf len-sum (list (sum (abs! length1)))) (setf dynamic1 (rnd-sample size '(p mp mf f ff))) (setf dynamic2 (rnd-sample size '(p mp mf f ff))) (setf omn1 (make-omn :length length1 :pitch pitch1 :velocity dynamic1)) (setf omn2 (make-omn :length length2 :pitch pitch2 :velocity dynamic2))  
    DEF-SC-SCORE:
    (def-sc-score example1     (:tempo 120      :layout ((in1 . len1) (in2 . len2) (in3 . len-sum)))   (in1 :synth pm-crotale        :note midi1        :dur len1        :vel vel1        :pan (gen-loop size (rnd1)))   (in2 :synth pm-crotale        :note midi2        :dur len2        :vel vel2        :pan (gen-loop size (rnd1)))   (in3 :synth snd2        :note '(60)        :dur length-sum        :vel '(0.1))   )  
     
    Example 2:
     
    DEFSYNTH:
    (sc:defsynth pm-crotale ((note 60) (dur 2.0) (vel 1.0) (pan 0))   (declare (ignore amp))   (let* ((freq (sc:midicps (+ 0 note)))          (envl (sc:perc 0 (* 4.0 dur)))          (mod! (+ 5 (/ 1 (sc:i-rand.ir 2 6))))          (out (sc:pm-osc.ar freq                             (* mod! freq)                             (sc:env-gen.kr envl                                            :time-scale (* 4.0 dur)                                            :level-scale vel)                             0                             (sc:env-gen.kr envl                                            :time-scale (* 4.0 dur)                                            :level-scale 0.3)))          (out (sc:pan2.ar out pan))          (out (* out                  (sc:env-gen.kr envl                                 :time-scale (* 1.3 (* 4.0 dur))                                 :level-scale (sc:rand.ir 0.1 0.4)                                 :act :free))))     (sc:out.ar 0 out)))  
    OMN Score:
    (setf chrom '(c4 cs4 d4 ds4 e4 f4 fs4 g4 gs4 a4 bb4 b4)) (setf chords (gen-chord-series chrom chrom :method 1 :type '? :segment '?)) (setf size (length chords)) (setf length (rnd-sample size '(w h q -q)))  
    DEF-SC-SCORE:
    (def-sc-score example2 (:tempo 102 :layout ((ins . length))) (ins :synth pm-crotale :note (omn-to-sc :midi chords) :dur length :vel (gen-loop size (rnd1))) )  
    To see more CL-Collider (SuperCollider) examples and understand the usage of the DEF- SC-SCORE macro, please follow these steps:
     
    Navigate to the Assistant navigator.
    Press the (D) icon.
    Look for the 'CL-Collider Examples' folder. Open the 'CL-Collider.opmo' file.
     
    Happy coding,
    Janusz
  3. Like
    opmo got a reaction from erka in Opusmodus 3.0.29031 Update   
    3.0.28031
     
    New Comment shortcuts
    control-;   -- add the #| |# around the selection.
    control-:   -- look for surrounding #| |# and remove them.
     
    Happy coding,
    Janusz
  4. Thanks
    opmo reacted to erka in purchased OM 2.1 a while back. Now own M1 Mac running Ventura.   
    Do a forum-search for m1 or Mac or "Opusmodus 3" and you will find all the discussions and answers from the past year(s).
    Then you can understand the design choice and why the upgrade to V3 is not free.
  5. Like
    opmo got a reaction from Pli in Opusmodus 3.0.29016 Update   
    3.0.29016
     
    – Fixed:
    OMN notation - group of attributes with error message. Repeat of tie attribute in OMN-TO-TIME-SIGNATURE function. Variabiles Warnings  
    – Documents:
    Documents edit.
  6. Thanks
    opmo reacted to Stephane Boussuge in tonality-map changed behavior   
    Hi Jon,
     
    indeed the tonality-map behaviour is changed recently for very good reasons and now you can do extraordinary things with tonality-map like mapping a full orchestra with a pitch remapping by register according to each playing register for the instruments.
    This is the default now for tonality-map (:map nil), it means tonality-map remap always to the closest pitch according to the register, so if you provide some chords, it is necessary to extend the register of this chords before the mapping using the keyword :map '(octave). There is also another possibility: :map '(extend) and :map '(step).
     
    To get your intended output, you have to use :map '(octave) like this:
     
    (setf progression (harmonic-progression '(1 6 4 2 5 1 2 4 5) '(c4 natural-minor) :size 7 :step 1 :base 1 )) (setf progression-list (mclist progression)) (setf accomp-shell '((q c3 p g3e4 c4e4 e3c4))) (setf accomp-phrase (gen-repeat 8 accomp-shell)) ;;; Here i'm preparing the harmonic path with the keyword :map '(octave) (setf path (tonality-series progression-list :map '(octave))) (setf accomp-map (tonality-map path accomp-phrase)) Best !
     
    Stéphane
     
  7. Like
    opmo reacted to Stephane Boussuge in Apparition pour Piano seul with OM score   
    Hi folks,
     
    here's a short piece for piano as an example of various practices.
     
    Best
     
    Stéphane
     
     
    ApparitionDAWEdit1.wav Apparition pour Piano.opmo
  8. Like
    opmo reacted to Stephane Boussuge in Zoom Into OM - 7. Spectral Harmony and Orchestral pitch remapping   
    Tonality-map function is very powerful and when used with a large pitch field, is able to map the entire pitch field on orchestra according to pitch field registers.
     
    SB
     
     
  9. Like
    opmo got a reaction from Veit in Evolution in random processes   
    (setf var (gen-accumulate (gen-repeat 20 '(0.1)))) (mapcar (lambda (x) (rnd-variance 60 x)) var)  
    or
    (setf var (gen-accumulate (gen-repeat 20 '(0.1)))) (loop for i in var collect (rnd-variance 60 i))  
  10. Like
    opmo reacted to Stephane Boussuge in Surabaya part 1 for Orchestra   
    First part of a work in progress for Orchestra based on spectral harmony (but quantised to 1/2 ton for that part...)
     

    stephaneboussuge · Surabaya pour Orchestre Part 1 SB.
  11. Like
    opmo got a reaction from AM in brownian bridge   
    (defun gen-brownian-bridge (n startend &key (all-gen nil) (output 'integer) (span 5))   (let ((seq)         (liste startend))     (progn       (setf seq (append (list startend)                         (loop repeat n                               do (setf liste (filter-repeat 1 (loop repeat (1- (length liste))                                                                     for cnt = 0 then (incf cnt)                                                                     append (append (list (nth cnt liste)                                                                                           (pick (nth cnt liste)                                                                                                 (nth (1+ cnt) liste)                                                                                                 :span span)                                                                                          (nth (1+ cnt) liste))))))                               collect liste)))       (setf seq (if (equal all-gen t)                     seq                   (car (last seq))))       (if (equal output 'pitch)           (integer-to-pitch seq)         seq))))  
    Small change otherwise you get:
    Warning: Local Variable Initialization clause (the binding of liste) follows iteration clause(s) but will only be evaluated once.  
  12. Like
    opmo reacted to AM in brownian bridge   
    i like the concept of "brownian bridge" to produce complex curves from a to b, but not completely randomized or controlled. in the video you see all the generations for one evaluation...
     
    how it could sound - mapped on different tonalities
     
     
     
    Brownsche Brücke – Wikipedia
    DE.WIKIPEDIA.ORG  
    for understanding in OPMO:
     
    axiom: start end
    (50 23)
     
    gen1 => 1 step
    (50 8 23)
     
    gen2  => 3 steps
    (50 15 8 -3 23)
     
    gen3 => 7 steps
    (50 40 15 13 8 -14 -3 29 23)
     
    gen4 => 15 steps
    (50 58 40 33 15 22 13 4 8 4 -14 -16 -3 17 29 17 23)
     
    ...and so on
     
    -------------------------------------------------------------------------------
     
    some evaluations with same AXIOM:
     

    Bildschirmaufnahme 2023-07-08 um 11.09.51.mov  
     
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; BROWNIAN BRIDGE -> could be use as a rnd-process from A to B (integers or pitches) ;;; if you have a look to example with ":all-gen t", you will see the process with all generations, how it works ;;; or take a look to: ;;; https://de.wikipedia.org/wiki/Wiener-Prozess#/media/File:BrownscheBewegung.png ;;; https://de.wikipedia.org/wiki/Brownsche_Brücke ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; SUB (defun pick (a b &key (span 5)) (let ((rnd1 (car (rnd-number 1 (+ a span) (- a span)))) (rnd2 (car (rnd-number 1 (+ b span) (- b span)))) (n)) (progn (setf n (car (rnd-number 1 rnd1 rnd2))) (if (or (= n a) (= n b)) (+ (rnd-pick '(1 -1)) n) n)))) (pick 2 3) ;;; MAIN ;;; MAIN (defun gen-brownian-bridge (n startend &key (all-gen nil) (output 'integer) (span 5)) (let ((seq)) (progn (setf seq (append (list startend) (loop repeat n with liste = startend do (setf liste (filter-repeat 1 (loop repeat (1- (length liste)) for cnt = 0 then (incf cnt) append (append (list (nth cnt liste) (pick (nth cnt liste) (nth (1+ cnt) liste) :span span) (nth (1+ cnt) liste)))))) collect liste))) (setf seq (if (equal all-gen t) seq (car (last seq)))) (if (equal output 'pitch) (integer-to-pitch seq) seq)))) ;;; EXAMPLES ;; SPAN influence -> span 2 (loop repeat 20 do (list-plot (gen-brownian-bridge 5 '(1.2 5.4) :span 2 :all-gen t) :zero-based t :point-radius 3 :join-points t) do (sleep 2)) ;; SPAN influence -> span 10 (list-plot (gen-brownian-bridge 5 '(50 23) :span 20 :all-gen t) :zero-based t :point-radius 3 :join-points t) ;;; SPAN default (5) (list-plot (gen-brownian-bridge 5 '(50 23) :all-gen t) :zero-based t :point-radius 3 :join-points t) (list-plot (gen-brownian-bridge 5 '(50 23)) :zero-based t :point-radius 3 :join-points t) (gen-brownian-bridge 5 '(50 23) :all-gen t :output 'pitch) (gen-brownian-bridge 5 '(50 23) :output 'pitch)  
  13. Like
    opmo got a reaction from AM in Opusmodus 3.0.29004 Update   
    3.0.29004
     
    – New functions:
    REMOVE-ATTRIBUTE REPEAT-ATTRIBUTE NTH-EVENT OMN-LAST-EVENT OMN-BUTLAST-EVENT
    Happy coding,
    Janusz
  14. Like
    opmo got a reaction from Stephane Boussuge in Opusmodus 3.0.29004 Update   
    3.0.29004
     
    – New functions:
    REMOVE-ATTRIBUTE REPEAT-ATTRIBUTE NTH-EVENT OMN-LAST-EVENT OMN-BUTLAST-EVENT
    Happy coding,
    Janusz
  15. Thanks
    opmo got a reaction from Stephane Boussuge in PSymph80887   
    OM Master 🙂
  16. Like
    opmo reacted to Stephane Boussuge in PSymph80887   
    Short orchestral work made this morning .
    SB.
     
     
    PoemTemp80887.mp3
  17. Thanks
    opmo got a reaction from Stephane Boussuge in Slonimsky Machine for Orchestra   
    Absolute great example. Your students will love it.
  18. Like
    opmo reacted to Stephane Boussuge in Slonimsky Machine for Orchestra   
    This is a raw unprocessed, unedited output from the Algorithm Orchestral Section Generator feed with Slonimsky patterns, you get this algorithm included with many others in this Composerworkshop new lessons video pack:
     
    Designing generative orchestral templates with Opusmodus (level 2) - Composer Workshop
    WWW.COMPOSERWORKSHOP.COM Welcome to the course on "Designing Generative Orchestral Templates with Opusmodus"! In this course, we will explore the fascinating world of computer-assisted composition, specifically focusing on the powerful music composition environment known as Opusmodus. Opusmodus is a cutting-edge software tool that empowers composers, music theorists, and researchers to create...  
    Slonimsky-Machine.mp3
  19. Like
    opmo reacted to RevJames in Designing Generatives Orchestral Templates with Opusmodus   
    This is such remarkable software.  I've only begun to scratch the surface of its capabilities, as time has allowed during the demo period.  It holds such promise in the generative sense, which is what I had been looking to explore, versus my current composing environment. I only hope that someday, I'll be able to afford the purchase of this incredible software.  In the interim, many thanks for all of the support that you provide for it, and my best wishes for your continued success.

    James Anthony
  20. Like
    opmo reacted to Stephane Boussuge in Designing Generatives Orchestral Templates with Opusmodus   
    Hi folks,
     
    I've made a new tutorial. With that tutorial you will get not only lessons but also the full generative Opusmodus algorithms to generate your own orchestral music !
     
    What sets this course apart is its focus on designing orchestral templates. Rather than simply scratching the surface of Opusmodus, we will delve deep into the process of constructing templates that serve as the foundation for your orchestral compositions. With a strong emphasis on generative techniques, you will learn how to breathe life into your music by harnessing the creative potential of Opusmodus.
     
    Course Highlights:
    1. Designing and using the orchestral template.
    Learn to design and utilise orchestral templates in Opusmodus
     
    2. Pattern based generative example.
    Explore pattern-based generative examples
     
    3. Orchestral pitch remapping.
    Master orchestral pitch remapping
     
    4. Instrumentation / Orchestration.
    Dive into instrumentation and orchestration techniques
     
    5. Assembling sections.
    Learn how to assemble sections effectively
     
    6. Section designer: Full algorithm.
    Use the Section Designer to create a full orchestral piece section by section
     
     
    Here's the link:
     
     
    Courses - Composer Workshop
    WWW.COMPOSERWORKSHOP.COM  
  21. Like
    opmo reacted to GenzoH in Sync different Live Coding scores   
    Ok, so until we have any kind os sync between different LCI workspaces, I've found a workaround by using a mouse automation app. The one I've downloaded that seems to work pretty well is Auto Mouse Click (murgaa.com). You can create lists of mouse actions including positions, clicks and repetitions, and also you can define the delay in milliseconds between each action or retrigs. There's almost no delay (also can be defined) and all the different workspaces start at the same time.
     
    I know it's a bit "rustic" aproach, but it works.
     
    Best!
  22. Like
    opmo got a reaction from Veit in Random movement between notes in time frame   
    (setf pitches (rnd-sample 12 (midi-to-pitch '(65 64 63 62 61 60))))  
    If the tempo is 60 then the span is 5/4 etc...
     
    (setf lengths (length-span 5/4 (rnd-sample 6 '(s -s e. q)))) (make-omn :length lengths :pitch pitches)
  23. Like
    opmo got a reaction from Stephane Boussuge in Random movement between notes in time frame   
    (setf pitches (rnd-sample 12 (midi-to-pitch '(65 64 63 62 61 60))))  
    If the tempo is 60 then the span is 5/4 etc...
     
    (setf lengths (length-span 5/4 (rnd-sample 6 '(s -s e. q)))) (make-omn :length lengths :pitch pitches)
  24. Like
    opmo reacted to AM in Random movement between notes in time frame   
    smart 🙂
  25. Like
    opmo got a reaction from AM in Random movement between notes in time frame   
    (setf pitches (rnd-sample 12 (midi-to-pitch '(65 64 63 62 61 60))))  
    If the tempo is 60 then the span is 5/4 etc...
     
    (setf lengths (length-span 5/4 (rnd-sample 6 '(s -s e. q)))) (make-omn :length lengths :pitch pitches)
×
×
  • Create New...

Important Information

Terms of Use Privacy Policy