Jump to content

Leaderboard


Popular Content

Showing content with the highest reputation since 01/18/2019 in all areas

  1. 6 points
    Andy

    The learning curve..thoughts

    For me, this is a much easier journey than Max/MSP or ACToolbox or Kyma or PWGL or ...in fact any program for composition where there is a bunch of boxes, wires and annoying graphics! The idea of boxes and graphics..the visual paradigm, is it is meant to make it easier somehow.. but I now realise the reverse is true. If you are just dealing with text and traditional music notation as in OM, it's really very straight forward. There is a learning 'bump' initially but then it really starts to make sense. I got so annoyed at Max going from 4 to 5 to 6 to 7 and the ridiculous changes in the GUI that meant I had to relearn the program every time. It was all about them. I feel Opusmodus is all about me. And that's quite a unique experience. And actually the real effort visually in Opusmodus has been put in to functionality, the IDE, which to be honest is totally unique. Thanks. Onward and upward. (with a few backwards I'm sure)
  2. 5 points
    opmo

    Opusmodus 1.3.24409

    Whats new: —'Check for Updates...' menu in Opusmodus app menu (no more manual downloads). 🙂 —New CLM instruments with omn-form plist input and documentation. badd-synth bandedwg-synth circular-scanned-synth fm-bell-synth fm-insect-synth fm-violin-synth grani-synth piano-synth pvoc-synth scanner-synth singbowl-synth —Additional _About documents for various function groups (Wikipedia). —CLM bug fixes. Installation: There are some changes to the Opusmodus user system folder and CLM implementation. Before opening the new application you need to delete the old Opusmodus folder. Make sure you save your personal files (scores, docs etc...) before. A good solution is to rename the Opusmodus folder first and then compress it. After you have deleted the Opusmodus user folder you can start the new application. At the start Opusmodus will ask you for permission to create a new user folder in your home directory, if you don’t see a window for it, it means the old folder is still on your computer. Make sure the new Opusmodus folder is installed in your home directory. Hopefully this is the last time we need to delete the previous Opusmodus user folder from the home directory. Best wishes, Janusz P.S. Few CLM examples from the "3.Howto Score/CLM/Sound Synthesis.opmo" file: fm-bell-synth (progn (defparameter count 50) (setf partials (library 'marangona-partials 'partials nil :random 20)) (setf par (rnd-sample count (partial :freq (flatten partials)))) (defparameter freq (gen-divide (rnd-sample count '(1 2 3 4 5)) par)) (defparameter dur (list (length-span 42 (rnd-sample count '(w h q w))))) (do-timeline '(dur (---xx--xx- ---xx---x- --x--xx--- ---x------ x----x---)) '(gen-pause x) :time '(w)) (defparameter vel (rnd-number count 0.05 0.43)) (defparameter dist (rnd-number count 0.5 1.0)) (defparameter env '((0 0 40 .1000 60 .2000 75 .4000 82 1 90 1 100 0) (0 0 60 .1000 80 .2000 90 .4000 95 1 100 0) (0 0 10 1 16 0 32 .1000 50 1 56 0 60 0 90 .3000 100 0) (0 0 30 1 56 0 60 0 90 .3000 100 0) (0 0 50 1 80 .3000 100 0) (0 0 40 .1000 60 .2000 75 .4000 82 1 90 1 100 0) (0 0 10 1 32 .1000 50 1 90 .3000 100 0) (0 0 60 .1000 80 .3000 95 1 100 0) (0 0 80 .1000 90 1 100 0))) (with-sound (:reverb jc-reverb :scaled-to .7) (fm-bell-synth dur freq vel :amp-env (rnd-sample count env) :index-env (rnd-sample count env) :index (rnd-number count 0.3 0.9) :reverb-amount 0.30 :distance dist)) ) fm-insect-synth (progn (defparameter par (library 'tbn-cs3-partials 'partials nil :random 12)) (defparameter dur '(rnd-sample 12 '(-q q. h -h. -w w. d -d.))) (defparameter freq '(rnd-sample 12 (flatten (partial :freq par)))) (defparameter amp '(rnd-sample 12 '(pppp ppp p mp))) (defparameter mod-freq-env '(0 0 40 1 95 1 100 .5)) (defparameter mod-index-env '(0 1 25 .7 75 .78 100 1)) (defparameter amp-env '(0 0 25 1 75 .7 100 0)) (defparameter fm-index '(rnd-number 12 .01 .6)) (defparameter mod-skew '(rnd-number 12 -20.0 -1.0)) (defparameter mod-freq '(rnd-number 12 20 60)) (with-sound '() (fm-insect-synth (eval dur) (eval freq) (eval amp) amp-env (eval mod-freq) (eval mod-skew) mod-freq-env 500.866 mod-index-env (eval fm-index) .500) (fm-insect-synth (eval dur) (eval freq) (eval amp) amp-env (eval mod-freq) (eval mod-skew) mod-freq-env 649.490 mod-index-env (eval fm-index) .500) (fm-insect-synth (eval dur) (eval freq) (eval amp) amp-env (eval mod-freq) (eval mod-skew) mod-freq-env 562.087 mod-index-env (eval fm-index) .500) (fm-insect-synth (eval dur) (eval freq) (eval amp) amp-env (eval mod-freq) (eval mod-skew) mod-freq-env 300.866 mod-index-env (eval fm-index) .500) ) ) grani-synth (progn (defparameter dur '(q h w d -q -h)) (defparameter amp '(pppp p pp f mp)) (with-sound (:reverb jc-reverb :reverb-channels 2) (grani-synth (rnd-sample 12 dur) (rnd-sample 12 amp) "oboe" :grain-envelope '(0 0 .2 .2 .5 1 .8 .2 1 0)) (grani-synth (rnd-sample 12 dur) (rnd-sample 12 amp) "oboe" :grains 10) (grani-synth (rnd-sample 12 dur) (rnd-sample 12 amp) "oboe" :grain-start '(0 .1 .3 .1 1 .6) :amp-envelope '(0 1 1 1) :grain-density 8 :grain-envelope '(0 0 .2 .2 .5 1 .8 .2 1 0) :grain-envelope-end '(0 0 .01 1 .99 1 1 0) :grain-envelope-transition '(0 0 .4 1 .8 0 1 0)) (grani-synth (rnd-sample 12 dur) (rnd-sample 12 amp) "oboe" :grain-start '(0 0 1 1) :amp-envelope '(0 1 1 1) :grain-density 20 :grain-duration '(0 .003 .2 .01 1 .3)) (grani-synth (rnd-sample 12 dur) (rnd-sample 12 amp) "oboe" :grain-start '(0 0 1 1) :amp-envelope '(0 1 1 1) :grain-density 20 :grain-duration '(0 .003 .2 .01 1 .3) :grain-duration-limit .02) (grani-synth (rnd-sample 12 dur) (rnd-sample 12 amp) "oboe" :amp-envelope '(0 1 1 1) :grain-density 40 :grain-start '(0 .1 .3 .1 1 .6)) (grani-synth (rnd-sample 12 dur) (rnd-sample 12 amp) "oboe" :amp-envelope '(0 1 1 1) :grain-density 40 :grain-start '(0 .1 .3 .1 1 .6) :grain-start-spread .01) (grani-synth (rnd-sample 12 dur) (rnd-sample 12 amp) "oboe" :grain-start '(0 0 1 1) :grain-start-spread 0.01 :amp-envelope '(0 1 1 1) :grain-density 40 :srate '(0 0 .2 0 .6 5 1 5)) (grani-synth (rnd-sample 12 dur) (rnd-sample 12 amp) "oboe" :grain-start '(0 0 1 1) :grain-start-spread .01 :amp-envelope '(0 1 1 1) :grain-density (rnd-sample 12 '(40 30 20)) :srate-base 2 :srate '(0 0 .2 0 .6 -1 1 -1)) (grani-synth (rnd-sample 12 dur) (rnd-sample 12 amp) "oboe" :grain-start '(0 0 1 1) :grain-start-spread .01 :amp-envelope '(0 1 1 1) :grain-density (rnd-sample 12 '(40 30 20)) :srate-linear t :srate (list 0 1 .2 1 .6 (expt 2 5/12) 1 (expt 2 5/12))) (grani-synth (rnd-sample 12 dur) (rnd-sample 12 amp) "oboe" :grain-start '(0 0 1 1) :grain-start-spread .01 :amp-envelope '(0 1 1 1) :grain-envelope '(0 0 .2 .2 .5 1 .8 .2 1 0) :grain-density (rnd-sample 12 '(40 30 20)) :grain-duration '(0 .02 1 0.1) :grain-duration-spread '(0 0 .5 .1 1 0)) (grani-synth (rnd-sample 12 dur) (rnd-sample 12 amp) "oboe" :grain-start '(0 0 1 1) :grain-start-spread 0.01 :amp-envelope '(0 1 1 1) :grain-density (rnd-sample 12 '(40 30 20)) :grain-degree '(0 0 1 90) :grain-degree-spread 10) (grani-synth (rnd-sample 12 dur) (rnd-sample 12 amp) "oboe" :grain-duration .06 :grain-density 20 :grain-density-spread 2 :srate 0) (grani-synth (rnd-sample 12 dur) (rnd-sample 12 amp) "oboe" :grain-duration .08 :grain-density (rnd-sample 12 '(40 30 20)) :grain-density-spread 2 :srate 5 :grain-degree 0 :grain-envelope '(0 0 .2 .2 .5 1 .8 .2 1 0) :grain-envelope-end '(0 0 .01 1 .99 1 1 0)) (grani-synth (rnd-sample 12 dur) (rnd-sample 12 amp) "oboe" :grain-duration .05 :grain-density 35 :grain-density-spread 3 :srate -5 :grain-degree 90 :srate (list 0 1 .3 1 .3 (expt 2 5/12) 1 (expt 2 5/12)))) ) piano-synth (progn (setf frames1 (library 'marangona-partials 'partials nil :random 48)) (setf frames2 (library 'marangona-frames 'partials nil :random 48)) (setf par1 (remove-partial frames1 :type :freq :min 27.5 :max 4186)) (setf par2 (remove-partial frames2 :type :freq :min 27.5 :max 4186)) (defparameter freq1 (rnd-order (gen-collect (rnd-sample 24 '(3 5 6 7 8)) (partial :freq par1)))) (defparameter freq2 (rnd-order (gen-collect (rnd-sample 38 '(2 3 4)) (partial :freq par2)))) (with-sound (:reverb jc-reverb) (piano-synth '(3e) (flatten freq1) '(.2 .3 .4) :bpm 72 :drypedalresonancefactor .25 :singlestringdecayrate-table '(21 -5 24.000 -5.000 36.000 -5.4 41.953 -5.867 48.173 -7.113 53.818 -8.016 59.693 -8.875 66.605 -9.434 73.056 -10.035 78.931 -10.293 84.000 -12.185) :singlestringpole-table '(21 .8 24 0.7 36.000 .6 48 .5 60 .3 84 .1 96 .03 108 .03) :stiffnesscoefficient-table '(21.000 -0.920 24.000 -0.900 36.000 -0.700 48.000 -0.250 60.000 -0.100 75.179 -0.040 82.986 -0.040 92.240 .3 96.000 .5 99.000 .7 108.000 .7)) (piano-synth '(e) freq2 '(0.1 0.2 0.3) :bpm 72 :drypedalresonancefactor .55 :detuningfactor-table '(24 5 36 7.0 48 7.5 60 12.0 72 20 84 30 96 100 108 300))) ) pvoc-synth (with-sound (:scaled-to .99) (pvoc-synth (rnd-sample 12 '(q h e s w d -q -h)) '(pppp pp ppp f) "marangona" :input-start 0 :input-end 12 :pitch-scaler (rnd-sample 12 '(.5 .1 .05 .8 .3 .16)) :pitch-offset (rnd-sample 20 '(20 100 200 300 440 150 730)) :pitch-offset-env '(0 0 20 0 50 100 70 100 80 0 100 0) :pitch-scaler-env '(0 1 50 2 100 1) :amp-env '(0 1 40 0 50 1 60 0 100 1) :gate 70) ) singbowl-synth (progn (defparameter size 120) (defparameter partials (library 'marangona-partials 'partials nil :random 50)) (defparameter par (rnd-sample size (partial :freq (flatten partials)))) (defparameter freq (gen-divide (rnd-sample size '(2 3 4 5)) par)) (defparameter length (rnd-sample size '(w h q e))) (defparameter velocity (rnd-number size .05 .43)) (defparameter env '((0 0 40 .1000 60 .2000 75 .4000 82 1 90 1 100 0) (0 0 60 .1000 80 .2000 90 .4000 95 1 100 0) (0 0 10 1 16 0 32 .1000 50 1 56 0 60 0 90 .3000 100 0) (0 0 30 1 56 0 60 0 90 .3000 100 0) (0 0 50 1 80 .3000 100 0) (0 0 40 .1000 60 .2000 75 .4000 82 1 90 1 100 0) (0 0 10 1 32 .1000 50 1 90 .3000 100 0) (0 0 60 .1000 80 .3000 95 1 100 0) (0 0 80 .1000 90 1 100 0))) (with-sound (:reverb jc-reverb :scaled-to .7 :output "ma-partials") (singbowl-synth length freq velocity :amp-env (rnd-sample size env) :reverb-amount 0.30)) ) fm-violin-synth (progn (defparameter size 10) (defparameter count 50) (setf glc-v1 (gen-length-cartesian 1 3 'd '? 'w 3 (rnd-sample size '(13 11 10 8)) '(1 2 3 4 5))) (setf glc-v2 (gen-length-cartesian 1 3 'd '? 'w 3 (rnd-sample size '(13 11 10 8)) '(1 2 3 4 5))) (setf glc-va (gen-length-cartesian 1 3 'd '? 'w 3 (rnd-sample size '(13 11 10 8)) '(1 2 3 4 5))) (setf glc-vc (gen-length-cartesian 1 3 'd '? 'w 3 (rnd-sample size '(13 11 10 8)) '(1 2 3 4 5))) (setf gu-sq (gen-unison (list glc-v1 glc-v2 glc-va glc-vc))) (setf l-v1 (1~ gu-sq)) (setf l-v2 (2~ gu-sq)) (setf l-va (3~ gu-sq)) (setf l-vc (4~ gu-sq)) (setf l-max (first (sort-desc (list (get-count l-v1 :length :note :sum t) (get-count l-v2 :length :note :sum t) (get-count l-va :length :note :sum t) (get-count l-vc :length :note :sum t))))) (setf intervals '((0 7) (0 0) (11 5) (-4 5) (-5 5) (0 13) (-5 18) (-36 13) (-13 13) (8) (-18 7) (-1 17) (-17 17) (-26 13) (-27 23) (-19 19) (-23 23) (18) (0) (7) (-14) (13) (-23 5) (-23 2) (-2 2) (6 2) (6 5) (19) (-10) (-17 11) (-11 11) (-11 5) (-24 13) (1 14) (-14 14) (-29 1) (-1 1) (7 0) (12 6) (-21 7) (-7 7) (-18 0) (1 13) (0 1) (-14 13) (-10 5) (-14 8) (0 6) (6) (-20 6) (-5 1) (17) (1) (-17 5) (-1 5) (-10 16) (-12 8) (0 8) (1 11) (-24 4) (-18 16) (-17) (-6 6) (-18 18) (-15 3) (-6 31) (-2 5) (-29 6) (-6 13) (-13 6) (7 13))) (setf pcount (gen-repeat 2 (get-count l-v1 :length :note))) (setf gr (gen-repeat (length pcount) (list intervals))) (setf gm-v1 (gen-markov gr :size pcount)) (setf gm-v2 (gen-markov gr :size pcount)) (setf gm-va (gen-markov gr :size pcount)) (setf gm-vc (gen-markov gr :size pcount)) (setf im-v1 (interval-map nil (append-sublist gm-v1))) (setf im-v2 (interval-map nil (append-sublist gm-v2))) (setf im-va (interval-map nil (append-sublist gm-va))) (setf im-vc (interval-map nil (append-sublist gm-vc))) (setf s-v1 (span l-v1 im-v1)) (setf s-v2 (span l-v2 im-v2)) (setf s-va (span l-va im-va)) (setf s-vc (span l-vc im-vc)) (setf ra-v1 (rnd-octaves 'violin s-v1)) (setf ra-v2 (rnd-octaves 'violin s-v2)) (setf ra-va (rnd-octaves 'viola s-va)) (setf ra-vc (rnd-octaves 'cello s-vc)) (setf p-v1 (ambitus 'violin ra-v1 :type :invert)) (setf p-v2 (ambitus 'violin ra-v2 :type :invert)) (setf p-va (ambitus 'viola ra-va :type :invert)) (setf p-vc (ambitus '(a2 c5) ra-vc :type :invert)) (setf weight '(29 19 8 8 17)) (setf vel '(0.07 0.1 0.15 0.2 0.25 0.35)) (setf v-v1 (gen-weight l-max (mapcar 'list vel weight))) (setf v-v2 (gen-weight l-max (mapcar 'list vel weight))) (setf v-va (gen-weight l-max (mapcar 'list vel weight))) (setf v-vc (gen-weight l-max (mapcar 'list vel weight))) (setf vln1 (make-omn :length l-v1 :pitch p-v1 :velocity v-v1)) (setf vln2 (make-omn :length l-v2 :pitch p-v2 :velocity v-v2)) (setf vla (make-omn :length l-va :pitch p-va :velocity v-va)) (setf vlc (make-omn :length l-vc :pitch p-vc :velocity v-vc)) (do-timeline '( vln1 (---x---x-- ---x-x-x-- --x--xx--- ---x------ x-) vln2 (---x---x-- ---x---x-- --x--xx--- ---x------ x-) vla (---x---x-- ---x---x-- --x--xx--- ---x------ --) vlc (---x---x-- ---x---xx- --x--xx--- ---x------ --) ) '(gen-pause x) :time '(h h. w)) (defparameter v1 vln1) (defparameter v2 vln2) (defparameter v3 vla) (defparameter v4 vlc) (defparameter env '((0 0 40 .1000 60 .2000 75 .4000 82 1 90 1 100 0) (0 0 60 .1000 80 .2000 90 .4000 95 1 100 0) (0 0 10 1 16 0 32 .1000 50 1 56 0 60 0 90 .3000 100 0) (0 0 30 1 56 0 60 0 90 .3000 100 0) (0 0 50 1 80 .3000 100 0) (0 0 40 .1000 60 .2000 75 .4000 82 1 90 1 100 0) (0 0 10 1 32 .1000 50 1 90 .3000 100 0) (0 0 60 .1000 80 .3000 95 1 100 0) (0 0 80 .1000 90 1 100 0))) (with-sound (:reverb jc-reverb :scaled-to .7) (fm-violin-synth v1 v1 v1 :bpm 30 :degree (rnd-number count 45 85) :fm-index (rnd-number count 0.10 1.0) :reverb-amount 0.30 :noise-amount (rnd-number count 0.00 0.004) :amp-env (rnd-sample count env) :glissando-amount (rnd-number count 0.00 0.8)) (fm-violin-synth v2 v2 v2 :bpm 30 :degree (rnd-number count 45 85) :fm-index (rnd-number count 0.03 1.0) :reverb-amount 0.30 :noise-amount (rnd-number count 0.00 0.004) :amp-env (rnd-sample count env) :glissando-amount (rnd-number count 0.00 0.8)) (fm-violin-synth v3 v3 v3 :bpm 30 :degree (rnd-number count 45 85) :fm-index (rnd-number count 0.10 1.0) :reverb-amount 0.30 :noise-amount (rnd-number count 0.00 0.004) :amp-env (rnd-sample count env) :glissando-amount (rnd-number count 0.00 0.8)) (fm-violin-synth v4 v4 v4 :bpm 30 :degree (rnd-number count 45 85) :fm-index (rnd-number count 0.70 1.0) :reverb-amount 0.30 :noise-amount (rnd-number count 0.00 0.004) :amp-env (rnd-sample count env) :glissando-amount (rnd-number count 0.00 0.8))) ) scanned-synth (progn (defparameter size 120) (setf partials1 (library 'tbn-cs3-partials 'partials nil :random 64)) (setf partials2 (library 'tbn-cs3-partials 'partials nil :random 64)) (setf freq1 (rnd-sample size (partial :freq (flatten partials1)))) (setf freq2 (rnd-sample size (partial :freq (flatten partials2)))) (defparameter dur1 (rnd-sample size '(s s s s))) (defparameter dur2 (rnd-sample size '(q e s s s -s))) (defparameter amp1 (rnd-number size .005 .13)) (defparameter amp2 (rnd-number size .005 .13)) (defparameter waves '(1 2 3 4 5 6 7 8 9 10 11 12 13)) (with-sound (:reverb jc-reverb) (scanned-synth dur1 freq1 amp1 :wave (rnd-sample size waves) :bpm 96 :pts (rnd-sample size '(192 256 512))) (scanned-synth dur2 freq2 amp2 :wave (rnd-sample size waves) :bpm 96 :pts (rnd-sample size '(192 256 512))) ) ) circular-scanned-synth (progn (defparameter size 24) (setf partials1 (library 'tbn-cs3-partials 'partials nil :random 50)) (setf partials2 (library 'tbn-cs3-partials 'partials nil :random 50)) (setf par1 (rnd-sample size (partial :freq (flatten partials1)))) (setf par2 (rnd-sample size (partial :freq (flatten partials2)))) (defparameter dur1 (rnd-sample size '(1 2 3 4 5))) (defparameter dur2 (rnd-sample size '(1 2 3 4 5))) (defparameter freq1 (gen-divide (rnd-sample size '(2 3 4 5)) par1)) (defparameter freq2 (gen-divide (rnd-sample size '(2 3 4 5)) par2)) (defparameter amp1 (rnd-number size .05 .43)) (defparameter amp2 (rnd-number size .05 .43)) (defparameter env '((0 0 40 .1000 60 .2000 75 1 90 1 100 0) (0 0 60 .1000 80 .2000 90 1 100 0) (0 0 10 1 16 0 32 .1000 50 1 100 0) (0 0 30 1 56 0 60 0 90 .3000 100 0) (0 0 50 1 80 .3000 100 0) (0 0 40 .1000 60 .2000 82 1 100 0) (0 0 10 1 32 .1000 50 1 100 0) (0 0 60 .1000 80 .3000 95 1 100 0) (0 0 80 .1000 90 1 100 0))) (with-sound (:reverb jc-reverb) (circular-scanned-synth dur1 freq1 amp1 :wave (rnd-sample size '(1 2 3 4)) :recompute-samps (rnd-sample size '(14 222 32 162 211 72)) :pts (rnd-sample size '(192 256 512)) :cycles (rnd-sample size '(1 2 3)) :amp-env (rnd-sample size env)) (circular-scanned-synth dur2 freq2 amp2 :wave (rnd-sample size '(1 2 3 4)) :recompute-samps (rnd-sample size '(14 222 32 162 211 72)) :pts (rnd-sample size '(192 256 512)) :cycles (rnd-sample size '(1 2 3)) :amp-env (rnd-sample size env)) ) ) badd-synth (progn (defparameter size 12) (setf partials (library 'marangona-partials 'partials nil :random 64)) (setf mpar (remove-partial partials :type :freq :max 1800.0)) (setf par (partial :freq mpar)) (setf freq '(rnd-sample size (flatten par))) (defparameter dur '(rnd-sample size '(1 2 3 4 5))) (defparameter amp '(rnd-number size .12 .33)) (with-sound (:reverb jc-reverb) (badd-synth (eval dur) (eval freq) (eval amp)) (badd-synth (eval dur) (eval freq) (eval amp)) (badd-synth (eval dur) (eval freq) (eval amp)) (badd-synth (eval dur) (eval freq) (eval amp)) (badd-synth (eval dur) (eval freq) (eval amp)) (badd-synth (eval dur) (eval freq) (eval amp)) ) ) bandedwg-synth (progn (setf row (library 'vienna 'berg 'r11)) (setf degree '(0 3 4 0 -2 -3 -1 0 -2)) (setf mat (gen-eval 6 '(harmonic-progression (setf degree (gen-rotate 2 degree)) row :relative t))) (setf end1 (harmonic-progression '(-13 -13) row :relative t)) (setf end2 (harmonic-progression '(-12 -12) row :relative t)) (setf end3 (harmonic-progression '(-13 -13) row :relative t)) (setf end4 (harmonic-progression '(-12) row :relative t)) (defparameter omn (make-omn :length '((q) (-h)) :pitch (assemble-seq mat end1 end2 end3 end4) :velocity '(mp) :span :pitch)) (with-sound (:reverb jc-reverb) (bandedwg-synth omn omn omn :mode 1) ) ) As you can see it is quite easy to use CLM in OM with OMN. More CLM instruments to come.
  3. 4 points
    Andy

    Using Nigel's Book

    I just wanted to say that as a newcomer to parametric composition and Opusmodus, Nigel's book has been so helpful. I have it as a pdf in the Utilities section of Opusmodus and work through a chapter a day and copy and paste his code directly into the Composer. I know Nigel wrote the tutorials, but his book sets a wider context which I have found very helpful in this beginning stage. Recommended!
  4. 4 points
    opmo

    Using Nigel's Book

    indeed, it is a great introduction to parametric composition. Nigel started working on this book at the time we were working on Opusmodus documentation. It makes me very happy to hear his work is appreciated by so many, He was a great supporter and teacher of algorithmic composition which has spread over many decades. We all miss him dearly. Note: There are a few changes to some of the Opusmodus function names since the release of Nigel's book. Some of the examples might end in error.
  5. 3 points
    Will be added to the next release: (setf pattern '((s c4 d4 e4 g4) (s c4 d4 g4 e4) (s g4 e4 c4 d4) (s c4 d4 f4 g4) (s c4 d4 g4 f4) (s g4 f4 c4 d4) (s c4 d4 g4 f4) (s g4 gb4 f4 g4) (s g4 gb4 f4 a4) (s d4 f4 g4 a4) (s a4 g4 f4 d4) (s d4 f4 g4 c5))) (pattern-series '(1 1 2 1 2 1 2) pattern) => ((s c4 d4 e4 g4) (s gs4 bb4 eb5 c5) (s cs5 bb4 fs4 gs4) (s bb4 c5 eb5 f5) (s fs5 gs5 cs6 b5) (s cs6 b5 fs5 gs5) (s a5 b5 e6 d6) (s e6 eb6 d6 e6) (s f6 e6 eb6 g6) (s gs6 b6 cs7 eb7) (s f7 eb7 cs7 bb6) (s b6 d7 e7 a7)) (pattern-series '(1 1 2 1 2 1 2) pattern :variant '(p p i r ri p p)) => ((s c4 d4 e4 g4) (s gs4 bb4 eb5 c5) (s cs5 bb4 fs4 gs4) (s bb4 gs4 f4 eb4) (s e4 fs4 cs4 b3) (s cs4 eb4 bb3 gs3) (s a3 b3 e4 d4) (s e4 eb4 d4 e4) (s f4 e4 eb4 g4) (s gs4 b4 cs5 eb5) (s f5 g5 a5 c6) (s cs6 gs5 fs5 eb5)) (pattern-series '(1 -1 2 -1 2 -1 2) pattern) => ((s c4 d4 e4 g4) (s gs4 bb4 eb5 c5) (s b4 gs4 e4 fs4) (s gs4 bb4 cs5 eb5) (s d5 e5 a5 g5) (s a5 g5 d5 e5) (s eb5 f5 bb5 gs5) (s bb5 a5 gs5 bb5) (s b5 bb5 a5 cs6) (s c6 eb6 f6 g6) (s a6 g6 f6 d6) (s cs6 e6 fs6 b6)) (pattern-series '(1 -1 2 -1 2 -1 2) pattern :variant '(p p i r ri p p)) => ((s c4 d4 e4 g4) (s gs4 bb4 eb5 c5) (s b4 gs4 e4 fs4) (s gs4 fs4 eb4 cs4) (s c4 d4 a3 g3) (s a3 b3 fs3 e3) (s eb3 f3 bb3 gs3) (s bb3 a3 gs3 bb3) (s b3 bb3 a3 cs4) (s c4 eb4 f4 g4) (s a4 b4 cs5 e5) (s eb5 bb4 gs4 f4)) with random (1 2) (pattern-series (rnd-sample (length pattern) '(1 2)) pattern) etc... (pattern-series (rnd-sample (length pattern) '(13 -13)) pattern :variant '?) Best, Janusz
  6. 2 points
    Dear Jorvd, Maybe this post can be useful. Best, Julio Or maybe this. I did it for composing a String Quartet from a piano reduction. It brings some ideas to work with harmony. Best, Julio ;;;HARMONY METHOD 2 ////////////////////////////////////////SEV CHORDS Basic Functions SETS/// ;;SETS 7-35 - Major Scale (setf Srm7 (pcs-transpose 9 (pcs '4-26) :pitch)) (setf S7M (pcs-transpose 4 (pcs '4-20) :pitch)) (setf Trm7 (pcs-transpose 4 (pcs '4-26) :pitch)) (setf T7M (pcs-transpose -1 (pcs '4-20) :pitch)) (setf Tam7 (pcs-transpose 11 (pcs '4-26) :pitch)) (setf D7 (pcs-transpose 11 (pcs '4-27b) :pitch)) (setf hd (pcs-transpose 9 (pcs '4-27) :pitch)) (setf F7M#11-5 (gen-rotate 2 (pcs-transpose -1 (pcs '4-8) :pitch))) ;;;Establishing a Progression (setf chordprog (chordize (list Srm7 S7M Trm7 T7M Tam7 S7M))) ;; Some repetitions and transpositions from Harmonic functions (setf chordtrp-rpt (pitch-transpose-repeat '((0) (1 2 3) (0 -1)) (chordize (list T7M S7M Trm7 T7M T7M T7M T7M T7M T7M T7M T7M T7M T7M T7M)))) ;;; DEFINE DROP TYPES Position of chords (setf csd '(0 0 0 0) dp2 '(0 -12 0 0) dp3 '(0 0 -12 0) dp2-4 '(0 -12 0 -12) dp2-3 '(0 -12 -12 0) ddp2-3 '(0 -24 0 -12) dp-24 '(-24 -24 -24 -24) dp-ligeti '(-24 -24 24 24)) ;;;DROP ORDER - Order of Positions (setf droplist (flatten (list dp2-4 dp2 dp2-4 dp3 dp2))) ;;;MAKING THE Actual Voicings (setf chordprogdrop (chordize-list (pitch-transpose-n droplist (sort-desc (pitch-melodize chordtrp-rpt))))) ;;;Using the voicings for the final result (setf chordprgtrp chordprogdrop) ;;; Choose how many repeats of the rhythm (setf times 1) ;;;Transform the chords into separate voices (setf voz1 (flatten (pitch-demix 1 chordprgtrp))) (setf voz2 (flatten (pitch-demix 2 chordprgtrp))) (setf voz3 (flatten (pitch-demix 3 chordprgtrp))) (setf voz4 (flatten (pitch-demix 4 chordprgtrp))) ;;; (OPTIONAL) Process AMBITUS Instrumental ou vocal//////////////////////////////////////// ;(setf vozamb1 (ambitus '(c4 c5) voz1) vozamb2 (ambitus '(f3 c5) voz2) vozamb3 (ambitus '(g3 g4) voz3) vozamb4 (ambitus '(c2 e3) voz4)) ;(setf vozamb1 (ambitus (ambitus-instrument 'flute) voz1)vozamb2 (ambitus (ambitus-instrument 'oboe) voz2) vozamb3 (ambitus (ambitus-instrument 'clarinet) voz3) vozamb4 (ambitus (ambitus-instrument 'bassoon) voz4)) (setf vozamb1 voz1 vozamb2 voz2 vozamb3 voz3 vozamb4 voz4) ;;;HOMORHYTHM (setf homorhy (gen-repeat times '(q stacc -q e stacc q e stacc h h -s s pizz s pizz s pizz)) r1 homorhy r2 homorhy r3 homorhy r4 homorhy)(setf arthomo '(stacc stacc ord stacc ord ord leg leg ord)) (setf dynhomo '(f f mf mf p< f mp< < <)) ;; THE DYNAMICS are a little crazy, but this is only to show the stuff ;;;outra possibilidade para homorritmo ;;;lista do ritmo e articulação basica (setf ritrepeat '(-s s s s s -s s s e stacc e stacc -s s ord s s -s s s s e stacc e stacc h ord -s s s s -s s s s e stacc e stacc -e q. ord e stacc e stacc e -s s ord s s -s s -h -q s s -s s h -h)) ;;;repetições (setf homorhy (gen-repeat times ritrepeat) r1 homorhy r2 homorhy r3 homorhy r4 homorhy) ;;;OMN ASSEMBLAGE da LINHA (for poliphony) (setf vozomn1 (make-omn :length r1 :pitch vozamb1 :articulation arthomo :velocity dynhomo)) (setf vozomn2 (make-omn :length r2 :pitch vozamb2 :articulation arthomo :velocity dynhomo)) (setf vozomn3 (make-omn :length r3 :pitch vozamb3 :articulation arthomo :velocity dynhomo)) (setf vozomn4 (make-omn :length r4 :pitch vozamb4 :articulation arthomo :velocity dynhomo)) ;;;--------------------------------------------------------- ;;; SCORE ;;;---------------------------------------------------------- ;;; ;;; (OPTIONAL) Time Signature Sequences (setf time-signatures '((2 4 1) (3 4 2) (4 4 1))) ;;;ONLY ONE TIME SIGNATURE ;(setf time-signatures '((4 4))) (def-score voices (:title "Piano-Red-4-Voices" :subtitle "Estudos Polifônicos" :composer "Julio-Herrlein" :key-signature 'atonal :time-signature time-signatures :tempo '("Meditativo" q 60) :layout (piano-solo-layout '(pno-rh1 pno-rh2) '(pno-lh pno-lh2))) (pno-rh1 :omn vozomn1 :channel 1 :sound 'gm :program 'Violin :volume 100) (pno-rh2 :omn vozomn2 :channel 2 :sound 'gm :program 'Violin :volume 70) (pno-lh :omn vozomn3 :channel 3 :sound 'gm :program 'Viola :volume 80) (pno-lh2 :omn vozomn4 :channel 4 :sound 'gm :program 'Cello :volume 80))
  7. 2 points
    opmo

    Opusmodus 1.3.24534

    This update completes the CLM integration. Before opening the new application you need to delete the user Opusmodus directory. Make sure you save your personal files (scores, docs etc...) before. A good solution is to rename the Opusmodus folder first and then compress it. After you have deleted the Opusmodus user folder you can start the new application. At the start, Opusmodus will ask you for permission to create a new user folder in your home directory, if you don’t see a window for it, it means the old directory is still on your computer. Make sure the new Opusmodus directory is installed in your home directory. For those of you that wish to dive into CLM sound synthesis system, I advise everyone to read the Read Me First document carefully first. New: – CLM instruments, utilities and documentation: load-clm-ins with-sound play stop-sound ring-modulate-file-synth pins-synth expsrc-synth tubebell-synth hammondoid-synth metal-synth fm-synth (generic multi-type FM Instrument) gong-synth fm-drum-synth stochastic-synth definstrument – No bracket when tuplet is beamed. – Musicxml display improvements. Fixed: – Fixed an issue where CLM sound won't stop if there are more then two instances playing. – Fixed an issue in Preferences where Change Audition Length 1/4 would set to 1/8. – Fixed navigator drag-and-drop re-arragement on Mojave. – Fixed an issue where Navigator search instead of jumping to the match, the selection was extended. Best wishes, Janusz
  8. 2 points
    Andy

    The learning curve..thoughts

    It's quite a feeling this Opusmodus thing. Stephen I have a website so maybe I'll do a 'post' there.
  9. 1 point
    Very nice, Jordv ! I'm very interested in Harmony. Let me know about your progress in this matter. I did a book about set theory and harmony. If you play guitar, you gonna like it. It have all the possible voicings with diagrams for guitarand much more, like hexatonics, voice leading, functional harmony, etc. Here's the link https://www.melbay.com/Products/30042BCD/combinatorial-harmony-concepts-and-techniques-for-composing-and-improvising.aspx And another post related to it All the Best, Julio
  10. 1 point
    Thanks Janusz for the very straightforward example! @Julio, looks like I'm in for an educational weekend! It seems like there's a lot of useful ideas in there. I am currently building a library of functional progressions, I think the ideas you're showing will be incredibly valuable for that, thanks a lot!
  11. 1 point
    opmo

    Different Voice for one note in a Chord

    Example: (setf v1 '(h e5 d5 b4 c5)) (setf v2 '(h g4 a4 q g4 f4 h e4)) (setf v3 '(h c4 f4 d4 c4)) (setf v4 '(h e3 f3 g3 c3)) (def-score Cade (:key-signature 'chromatic :time-signature '(4 2) :tempo 80 :ignore-time-signature t :ignore-tempo t :layout (piano-layout '(v1 v2) '(v3 v4))) (v1 :omn v1 :channel 1 :sound 'gm :program 0) (v2 :omn v2) (v3 :omn v3) (v4 :omn v4) )
  12. 1 point
    First, you need to create a musicxml file from your score: (compile-score 'file-name :output :musicxml :file "file-name") Next: (musicxml-to-editor "file-name") To open the file in Finale: (musicxml-to-editor "file-name" :application "Finale") If the application name is not working you can use the identifier keyword with the bundle-identifier. For example the Sibelius 7.5 version identifier is "com.avid.Sibelius75" (musicxml-to-editor "file-name" :identifier "com.avid.Sibelius75")
  13. 1 point
    opmo

    CLM Installation in Opusmodus 1.3.24534

    CLM Installation Common Lisp Music, by William Schottstaedt is a powerful sound synthesis language implemented in Lisp and C. CLM is essentially a toolbox for instrument building. Although it comes with a number of instruments ready to use, most composers use CLM to define their own instruments. For those of you that wish to dive into CLM sound synthesis system, I advise everyone to read this document carefully first. 1. Command Line Tools First you need to find out if "command line tools" are installed in your system. The C compiler is essential at the instrument compile and load time. Launch the Terminal, found in /Applications/Utilities/ To check if command line tools are installed run: xcode-select --version if installed you will see the below with the version found in your system, something like that: xcode-select version 1234 If command line tools are not installed run: xcode-select --install A software update popup window will appear that asks: “The xcode-select command requires the command line developer tools. Would you like to install the tools now?” choose to confirm this by clicking “Install”, then agree to the Terms of Service when requested. Wait for the Command Line Tools package download to complete, it’ll be about 130MB and installs fairly quickly depending on your connection speed. The installer goes away on its own when complete. Enjoy your new unix command line toolkit! 2. Load and Compile Instruments CLM system comes with a number of instruments which are a great starting point to see and hear CLM in action. Some of them are simple others are complex. Before you can run any of the instruments you must compile them first. To do that you need to open and evaluate a file "Load CLM Instrument.lisp", you will find the file in the CLM directory. This process will take a minute or so and it will create binary and dynamic library files for each of the instruments. The binary files will be saved in the bin directory and the library files will be saved in the libclm directory. After this process is completed you are ready to run the CLM Examples. If you wish to load your instruments at the startup of the app move the "Load CLM Instrument.lisp" file into the “~/Opusmodus/Extensions/“ directory. Thats all you need to do to make CLM system work in Opusmodus. Best wishes, Janusz
  14. 1 point
    Like this: (pitch-transpose-n '(2 2 2 2) '(fs4 gs4 as4 cs5)) => (gs4 bb4 c5 eb5) (pitch-transpose-n '(2 2 2 2) '(c5 d5 e5 g5)) => (d5 e5 fs5 a5) Other solution would be to work with intervals only: INTERVAL-MAP
  15. 1 point
    Deb76

    Request: make-omn

    Dear Julio, Sorry for the delay of the answer but I finalized a project with a baroque flutist around the tale of Andersen "The Nightingale and the Emperor of China" and whose music was written with OPMO. Indeed, the association of notation in integers with the option: text is useful. Many thanks Best! Didier
  16. 1 point
    I wish to analyse process of Messiaen's modes of limited transpositions. I choose one of the modes, say the 3, from OPMO's "modes" library, which gives me the mode : (c4 d4 eb4 e4 f4 g4 gs4 bb4 b4) - and its intervallic structure: (2 1 1 2 1 1 2 1). And I want to replicate the process. it's a starting point. There are 9 notes, I divide them by 3 and I get three trichords ((c4 d4 eb4) (e4 gb4 g4) (ab4 bb4 b4)) and the same 3 (1 2 1). if I select the first trichorde (c4 d4 eb4) and I report it on each of the first notes of the three trichordes c4 - e4 - ab4 from the function Pitch-Transpose-Start I get as result mode 3 but disordered : (setf mod3divide (gen-divide 3 modmessiaen3)) ; => ((c4 d4 eb4) (e4 gb4 g4) (ab4 bb4 b4)) (setf firstmodmessiaen3 (filter-first 3 modmessiaen3)) ; => (c4 d4 eb4) (setf report3 '(c4 e4 ab4)) (setf rep3 (gen-repeat 3 (list report3))) ; => ((c4 e4 ab4) (c4 e4 ab4) (c4 e4 ab4)) (setf pch3 (flatten (pitch-transpose-start firstmodmessiaen3 rep3))) ; => ((c4 e4 gs4) (d4 fs4 bb4) (eb4 g4 b4)) => (c4 e4 gs4 d4 fs4 bb4 eb4 g4 b4) This result I wanted to reorder in an upward progression and as I did not find the function, I tested pcs-prime-form but which is not adapted. But I found the function that I wanted with sort-asc and I reconstruct the mode 3 and its intervallic structure : (setf Messiaen3order (sort-asc pch3)) ; => (c4 d4 eb4 e4 fs4 g4 gs4 bb4 b4) (setf SIMessiaenMod3a (pitch-to-interval Messiaen3order)) ; => (2 1 1 2 1 1 2 1) Of course, I can combine the two functions together : (setf process3Messiaen (sort-asc (flatten (pitch-transpose-start firstmodmessiaen3 rep3)))) ; => (c4 d4 eb4 e4 fs4 g4 gs4 bb4 b4) But thank you Janusz for your questions. concerning the Pitch-transpose-Start function you had indicated to me when I wanted to recreate the multiplication chords of Pierre Boulez. Best wishes. Didier
  17. 1 point
    lviklund

    Multiple def-scores?

    Andy, Maybe this can help. https://opusmodus.com/forums/topic/415-working-with-large-pieces-in-multiple-sections/
  18. 1 point
    opmo

    make-omn and ties

    you could use tie-bars function: (setf lens '((e = = =) (e = = =))) (setf notes '((c4 d4 = =) (d4 g4 = =))) (tie-bars (make-omn :length lens :pitch notes)) => ((e c4 mf d4 d4 d4 tie) (e d4 mf g4 g4 g4)) section or exclude options allows you to control which bars you like to tie.
  19. 1 point
    Done in version 1.3.24409.
  20. 1 point
    opmo

    Opusmodus 1.3 release

    Whats new in version 1.3 Compatibility with macOS Mojave 
macOS 10.14 Dark Mode 
CLM added
 OSC added 
MIDI player improvements New functions: binary-to-attribute merge-attributes circle-pitch-plot
 circle-rhythm-plot xy-plot pcs-rhythm
 edit-events find-max-span fit-to-span
 gen-osc-data
 osc-thread 
stop-osc-threads Enhancements and fixes: quantizer returns now the count of given length-notes single-events returns given type don't join dissimilar rests fixed rest grouping fixed tied 8va or 8vb tuplets Installation: There are some changes to the Opusmodus user system folder. Before opening the new application you need to delete the old Opusmodus folder. Make sure you save your personal files (scores, docs etc...) before. A good solution is to rename the Opusmodus folder first and then compress it. After you have deleted the Opusmodus user folder you can start the new application. At the start Opusmodus will ask you for permission to create a new user folder in your home directory, if you don’t see a window for it, it means the old folder is still on your computer. Make sure the new Opusmodus folder is installed in your home directory. New Opusmodus folder: Upgrade: Opusmodus 1.3 requires a new serial number to run. When purchasing upgrade 1.3 the current user will need to provide an Opusmodus 1.2 serial number. After the confirmation which takes a few seconds only, you will be redirected to the purchase page. Following the purchase a new serial number will be sent to you by email. Happy New Year 2019 Yours, Janusz Podrazik
  21. 1 point
    In the jazz world, Barry Harris came up with the idea of harmonizing a bebop scale. Combining a C6 (C, E, G, A) and a Bdim7 (B, D, F, Ab) chords, we have this scale: From this stantpoint we can alternate tonic and dominant sounds, like this: Every pair of chords have all the 8-note set. The notes C,E, G and A are always harmonized with a C6 chord. The notes D, F, Ab and B are always harmonized with a Bdim7 chord. So, from the point of view of sets, there is no problem. WHAT IS NEEDED: I want a way to start FROM the melody, and then make a four part block harmonization with this (or any other) harmonic system from the melody as an OMN expression. So, I need a way to filter the notes to aply the right chord: FOR EXAMPLE: For the notes C, E, G and A If the note is an C (in any register), I will apply a chord like , I will add the notes A, G and E, below the melody. If the note is an (in any register), I will apply a chord like , I will add the notes G, E and C, below the melody. And so on... For the notes D, F, Ab and B: If the note is an B (in any register), I will apply a chord like , I will add the notes Ab, F and D, below the melody. And so on: So, to make any procedure: I need first find a way to apply a specific procedure only over the notes I want, over all the C notes, all the B notes, etc. How to filter from an OMN expression ? All the best ! Julio
  22. 1 point
    Hi Julio, use substitute-map in place of vector mapping because if you use the vector-map function, the vector you give need to contain at least one time one of each value. if not, it is rounded internally by the function (the vector-map function determine (deduct) itself it's own bounds by the ambitus of the numbers you give to it.) So, better to do: (setf phrase1 (pitch-transpose trsp1 (substitute-map cells-reserv (gen-integer (- (length cells-reserv) 1)) vector-ctrl-1))) All the best S.
  23. 1 point
    opmo

    Quantization

    Thank you Yuichi for sharing, great piece, I am very happy to see Opusmodus is able to help you realise your ideas.
  24. 1 point
    torstenanders

    Polyphonic preview?

    Dear Janusz, To be clear: I do not expect that there will be a keyboard shortcut for every user added to Opusmodus. Instead, if you just share an example of code how to add a short key (and ideally a menu entry) to the Hemlock editor, that would be great. Thanks again! Best, Torsten
  25. 1 point
    All of us, as Opusmodus users, know the possibility to compose a piece with multiples sections and assemble later. We can use the ASSEMBLE-SEQ function in our piece for assemble some material and sections, but we also can use COMPILE-SCORE with multiple pre-defined scores assembled in one COMPILE-SCORE instruction this way: (compile-score '( score1 score2 score3 etc. ) ) This is a very convenient way for assembling multiple sections as multiple score. i put this instructions in a separate file named COMPILE-SCORE and all other section-score in files named S1, S2, S3.... But when the piece grown, you can have many score files in you workspace navigator to evaluate before compiling the full score. In that case, i add a last file named LoadAll. opmo containing the following instruction for load and read in one time all my section's scores: (mapcar 'load '( "/Users/yourUserName/Opusmodus/Scores/S1.opmo" ;; S1 for section1, s2 for section2 and so on... "/Users/yourUserName/Opusmodus/Scores/S2.opmo" "/Users/yourUserName/Opusmodus/Scores/S3.opmo" "/Users/yourUserName/Opusmodus/Scores/S4.opmo" "/Users/yourUserName/Opusmodus/Scores/S5.opmo" "/Users/yourUserName/Opusmodus/Scores/S6.opmo" "/Users/yourUserName/Opusmodus/Scores/S7.opmo" "/Users/yourUserName/Opusmodus/Scores/S8.opmo" )) Attached to this post, 2 pictures of one of my workspace showing the organisation of the files. SB.
×