Jump to content

Opusmodus 3.0.29046 Update


Recommended Posts

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

Link to comment
Share on other sites

×
×
  • Create New...

Important Information

Terms of Use Privacy Policy