Jump to content

opmo

Janusz Podrazik
  • Content count

    1,523
  • Joined

  • Last visited

  • Days Won

    228

Everything posted by opmo

  1. Since some time we are working on implementing Bill's Schottstaedt 'Synthesis package CLM' into Opusmodus. As expected we make the CLM working with OMN form sequence or with single parameters - example below. The score is using partials from The Bells of the Campanile: La Marangona. Below you will find an audio file of the score which is rendered each time you make evaluation. Best wishes to all, Janusz ;; --------------------------------------------------------- ;; MARANGONA ;; --------------------------------------------------------- ;; Parameters (defparameter count 50) (setf partials1 (library 'marangona-partials 'partials nil :random 50)) (setf partials2 (library 'marangona-partials 'partials nil :random 50)) (setf partials3 (library 'marangona-partials 'partials nil :random 50)) (setf partials4 (library 'marangona-partials 'partials nil :random 50)) (setf par1 (rnd-sample count (partial :freq (flatten partials1)))) (setf par2 (rnd-sample count (partial :freq (flatten partials2)))) (setf par3 (rnd-sample count (partial :freq (flatten partials3)))) (setf par4 (rnd-sample count (partial :freq (flatten partials4)))) (defparameter freq1 (gen-divide (rnd-sample count '(2 3 4 5)) par1)) (defparameter freq2 (gen-divide (rnd-sample count '(1 2 3 4 5)) par2)) (defparameter freq3 (gen-divide (rnd-sample count '(1 2 3 1 4 5)) par3)) (defparameter freq4 (gen-divide (rnd-sample count '(1 2 3 1 4 5)) par3)) (defparameter len1 (list (length-span 42 (rnd-sample count '(w h q w))))) (defparameter len2 (list (length-span 42 (rnd-sample count '(d h h))))) (defparameter len3 (list (length-span 42 (rnd-sample count '(h. w q))))) (defparameter len4 (list (length-span 42 (rnd-sample count '(d d h))))) (do-timeline '( len1 (---xxx-xx- ---xxx---- --x--xx--- ---x------ x-) len2 (---xxx-xx- ---xx-x--- --x--xx--- ---x------ x-) len3 (---xxx-xx- ---xx--x-- --x--xx--- ---x------ --) len4 (---xxx-xx- ---xx---x- --x--xx--- ---x------ --) ) '(gen-pause x) :time '(w)) (defparameter dur1 (omn :length (flatten len1))) (defparameter dur2 (omn :length (flatten len2))) (defparameter dur3 (omn :length (flatten len3))) (defparameter dur4 (omn :length (flatten len4))) (defparameter amp1 (rnd-number count 0.05 0.43)) (defparameter amp2 (rnd-number count 0.05 0.43)) (defparameter amp3 (rnd-number count 0.05 0.43)) (defparameter amp4 (rnd-number count 0.05 0.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))) ;; --------------------------------------------------------- ;; Score (with-sound (:play nil :reverb jc-reverb :scaled-to .7 :statistics t :channels 2 :output "marangona-series") (fmviolin-synth dur1 freq1 amp1 :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) :fm1-rat (rnd-number count 0.00 6.718) :fm2-rat (rnd-number count 0.00 4.414) :fm3-rat (rnd-number count 0.00 1.141) :glissando-amount (rnd-number count 0.00 0.8) ) (fmviolin-synth dur2 freq2 amp2 :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) :fm1-rat (rnd-number count 0.00 4.718) :fm2-rat (rnd-number count 0.00 6.414) :fm3-rat (rnd-number count 0.00 1.141) :glissando-amount (rnd-number count 0.00 0.8) ) (fmviolin-synth dur3 freq3 amp3 :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) :fm1-rat (rnd-number count 0.00 1.718) :fm2-rat (rnd-number count 0.00 4.414) :fm3-rat (rnd-number count 0.00 6.141) :glissando-amount (rnd-number count 0.00 0.8) ) (fmviolin-synth dur4 freq4 amp4 :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) :fm1-rat (rnd-number count 0.00 4.718) :fm2-rat (rnd-number count 0.00 6.414) :fm3-rat (rnd-number count 0.00 1.141) :glissando-amount (rnd-number count 0.00 0.8) ) ) Score with omn-form sequence: (with-sound (:play nil :channels 2 :reverb jc-reverb :scaled-to .6 :statistics t :output "quartet") (fmviolin-omn vn1 :reverb-amount 0.20 :bpm 44) (fmviolin-omn vn2 :reverb-amount 0.20 :bpm 44) (fmviolin-omn va :reverb-amount 0.20 :bpm 44) (fmviolin-omn vc :reverb-amount 0.20 :bpm 44) )
  2. The do-timeline is already in the system 🙂
  3. opmo

    Slonimsky Stuff HELP

    I think this could be done.
  4. opmo

    add-text-attributes

    Use format function.
  5. opmo

    Slonimsky Stuff HELP

    If someone will get me the entire Thesaurus as a library or as a lists (patterns) then we could do something what Julio is proposing. PDF etc... won't do. Each pattern should be in OM library form of at least a lisp lists.
  6. opmo

    how to number pitches

    create you own text articulations: (add-text-attributes '(nr0 "0") '(nr1 "1") )
  7. opmo

    how to number pitches

    (q c4 num0 cs4 num1 d4 num2) or create you own articulations, do check the docs.
  8. In the next update we will get more snippet user preferences.
  9. opmo

    How to force a time signature for Snippet fast use

    You find them all in the snippet document.
  10. opmo

    How to force a time signature for Snippet fast use

    In the next update you will be able to change the *audition-time-signature*: (defparameter *audition-time-signature* '(4 4)) (defparameter *audition-time-signature* '(3 4)) ... The default setup is: (defparameter *audition-time-signature* nil)
  11. opmo

    Idea for a Rhythmic Set Theory Function

    I am glad you found a way to achieve the result. Now I can make a function which will allow us to work with a series.
  12. opmo

    Idea for a Rhythmic Set Theory Function

    The function is already there: time-point-system (setf row '(bb4 a4 gs4 as4 cs5 e5 d4 f4 g4 eb4 fs4 c5)) (time-point-system row 's :start 0) => ((h bb4 tie e. s a4 tie) (h a4 tie e e gs4) (e. bb4 cs5 q. e5 tie) (q e5 e. d4 e f4 e. g4 tie) (q g4 tie s e. eb4 q fs4 tie) (e fs4 h c5 tie e))
  13. opmo

    OSC & Threads Trigger

    OSC & Threads Trigger - without documented functionality. To experiment with the files you will need Reaktor 6. OSC-Threads-Example.zip
  14. Click on the midi panel first 🙂
  15. opmo

    Turing Piano (Julio Herrlein)

    Thank you for great presentation.
  16. opmo

    FORTE NUMBERS as Rhythms

    Great solo! Excellent analysis and use of PSC and TPS.
  17. Grand improvisation, cool indeed 😎
  18. The new name is length-to-tempo - for some time 🙂
  19. I like that. Will do shortly.
  20. opmo

    binary-filter

    Predefined functions can't be changed otherwise you would break the system. I will make a doc for the binary-invert function soon.
  21. opmo

    binary-filter

    (defun binary-filter (alist bin-list &key (omn t)) (let ((event-list (cond ((omn-formp alist) (single-events alist)) (t alist)))) (flatten (loop for i in event-list for j in bin-list when (= j 1) collect i else append (maybe-omn-decode omn (cond ((omn-formp i) (list (length-invert (car i)))) ((lengthp i) (neg! (omn :length (list i)))))))))) (binary-filter '(q c4 mf d4 e4 e f4 ppp g4 a4 b4) '(1 0 1 1 0 1 1)) => (q c4 mf -q q e4 mf e f4 ppp -e e a4 ppp e b4 ppp) Only one type of parameters can be decoded at a time.
  22. Please go to the Opusmodus Extension folder and remove the function 'double' form the 'Source Code.opmo'. This should fix the problem. If you get massage like: > Error: The function double is predefined by Opusmodus. it means you are using a function name (your own) which is already part of the Opusmodus System.
  23. opmo

    Opusmodus 1.2.23428

    View File Opusmodus 1.2.23428 New: vector-to-envelope sum-to-size snippet - Audition default parameters. Function name change: vector-shift -> vector-envelope2 L-System addition: Allows functions inside a rule. New keyword :seq in filter-repeat sum-to-size This function returns a list of numbers in a given size of equal numbers (plus/minus 1) which add up to a total. Examples: (sum-to-size 45 8) => (5 5 5 6 6 6 6 6) (sum-to-size 25 7) => (3 3 3 4 4 4 4) (sum-to-size 25 3) => (8 8 9) (sum-to-size 25 11) => (2 2 2 2 2 2 2 2 3 3 3) (sum-to-count 104 8) => (13 13 13 13 13 13 13 13) Snippet Audition default parameters: (defparameter *audition-tempo* 120) (defparameter *audition-length* 1/4) (defparameter *audition-pitch* 'c4) (defparameter *audition-velocity* 'mf) (defparameter *audition-ignore-ports* t) (defparameter *audition-sound* 'gm) (defparameter *audition-channel* 1) (defparameter *audition-program* 0) (defparameter *audition-volume* 92) (defparameter *audition-port* 0) The default ‘Audition’ parameters will allow you to make changes to the ‘Preferences/Audition’ parameters without the need to open the window each time you make a change to port, channel, sound or program. Using the ‘Audition’ parameters as a part of the code will help you in your work flow. This possibility is useful for demonstrations and presentations. Examples: 1. (progn ;;; Cello (defparameter *audition-tempo* 72) (defparameter *audition-velocity* 'f) (defparameter *audition-sound* 'gm) (defparameter *audition-channel* 7) (defparameter *audition-program* 'cello) (defparameter *audition-volume* 100) ) ;(J. S. Bach, Sechs Suiten Sonaten fuer Violoncello solo, Suite I, Preludium, 1722) '(((leg s g2 mf e3 b3 a3 b3 g3 fs3 g3) (leg e3 g3 dig2 fs3 g3 b2 > dig1 d3 > cs3 > b2 >)) ((leg s cs3 p dig3 g3 dig2 a3 sul g3 dig2 a3 g3 a3 g3) (leg cs3 g3 a3 g3 a3 g3 a3 g3)) ((leg s fs3 p< dig1 a3 < sul d4 < cs4 d4 mf a3 dig4 g3 a3 fs3) (leg a3 g3 a3 d3 > sul fs3 > dig3 e3 > d3 >)) ((leg s e2 p dig1 b2 g3 fs3 g3 b2 g3 b2) (leg e2 b2 g3 fs3 g3 b2 g3 b2))) 2. (progn ;;; Piano (defparameter *audition-tempo* 98) (defparameter *audition-velocity* 'f) (defparameter *audition-sound* 'gm) (defparameter *audition-channel* 1) (defparameter *audition-program* 'Acoustic-Grand-Piano) (defparameter *audition-volume* 100) ) ;(F. Chopin, Etudes, Op. 10, No. 5, 1833) '((3e gb6 bb6 db6 gb6 eb6 gb6 db6 gb6 bb5 db6 gb5 bb5) (3e gb5 bb5 db5 gb5 eb5 gb5 db5 gb5 bb4 db5 gb4 bb4) (3e db4 db5 ab4 db5 ab4 ab5 ab4 ab5 eb5 ab5 eb5 eb6) (3e eb5 eb6 ab5 eb6 ab5 ab6 ab5 ab6 db6 ab6 db6 db7)) To send the snippet to a port you need to set the *audition-ignore-ports* to nil and set the *audition-port* to a number of your virtual instrument port: 3. (progn ;;; Violin (defparameter *audition-tempo* 120) (defparameter *audition-velocity* 'mf) (defparameter *audition-ignore-ports* nil) (defparameter *audition-sound* 'vsl-violin) (defparameter *audition-channel* 1) (defparameter *audition-program* 0) (defparameter *audition-volume* 100) (defparameter *audition-port* 1) ) vector-to-envelope This function applies ‘ambitus series’ derived from a envelope list into a list of floating-point numbers. Lets examine first how envelope create the ambitus series (low high). We interleave the envelope with a value 2 first and then we apply a sort function: (setf envelope '(-5.1 -2.3 1.5 -0.8 4.6 10.6)) (sort-asc (gen-interleave 2 envelope)) => ((-5.1 -2.3) (-2.3 1.5) (-0.8 1.5) (-0.8 4.6) (4.6 10.6)) From the envelope above the function creates five ambitus series each with two lists: start (low high) and end (low high). Start End ((-5.1 -2.3) (-2.3 1.5)) ((-2.3 1.5) (-0.8 1.5)) ((-0.8 1.5) (-0.8 2.1)) ((-0.8 2.1) (-0.8 4.6)) ((-0.8 4.6) (4.6 10.6)) Next, the values list (floating-point numbers) is divided by the count of the ambitus series. In our example the count is 5: (sum-to-size 128 5) => (25 25 26 26 26) The final process is to select randomly segment numbers for each of the 5 sublists: With :type 1 (rnd-sum 25 '(2 3 5 7 11 13 17 19)) => (7 3 2 2 11) With :type 2 (length segments) (rnd-sum-to-size 25 8 '(2 3 5 7 11 13 17 19)) => (2 5 3 3 3 3 3 3) With :type 3 (length segments) - with equal or plus/minus 1 equal numbers. (sum-to-size 25 8) => (3 3 3 3 3 3 3 4) Lets see the result: (list-plot (vector-to-envelope '(-5.1 -2.3 1.5 -0.8 4.6 10.6) (gen-white-noise 128))) A slightly different result we can achieve with optional :type 2: (list-plot (vector-to-envelope '(-5.1 -2.3 1.5 -0.8 4.6 10.6) (gen-white-noise 128) :type 2)) Most equal distribution of segments is achieved with :type 3: (list-plot (vector-to-envelope '(-5.1 -2.3 1.5 -0.8 4.6 10.6) (gen-white-noise 128) :type 3)) Examples: (list-plot (vector-to-envelope (rnd 12 :low -10.0 :high 40.0) (gen-white-noise 356) :segment '(1 2 3 4 5))) (list-plot (vector-to-envelope (rnd 6 :low -1.0 :high 4.0 :seed 45) (gen-white-noise 356) :segment '(1 2 3) :type 3)) (list-plot (vector-to-envelope (rnd 4 :low -1.0 :high 4.0 :seed 45) (gen-white-noise 356) :segment (primes 12))) (setf env2 '(0.2 0.1 0.5 0.1 0.8 0.5 0.1 0.4 0.2 0.3)) (list-plot (vector-to-envelope (gen-tendency 4 env2) (gen-tendency 356 env2) :segment (primes 4))) New keyword :seq in filter-repeat (filter-repeat 1 '(a4 gs4 a4 gs4 a4 fs4 gs4 g5 bb5 g5 gs4) :seq 2) => (a4 gs4 a4 fs4 gs4 g5 bb5 g5 gs4) (filter-repeat 1 '(gs4 fs3 a4 fs3 a4 bb5 a4 gs4) :seq 2) => (gs4 fs3 a4 bb5 a4 gs4) (filter-repeat 1 '(gs4 fs3 a4 fs3 fs3 a4 fs3 a4 bb5 a4 gs4) :seq 3) => (gs4 fs3 a4 fs3 a4 bb5 a4 gs4) L-System Example with a function inside a rule: (progn (defclass llen (l-system) ((axiom :initform '(s e)) (depth :initform 2))) (defmethod l-productions ((ls llen)) (choose-production ls (s (--> (rnd-pick '((s * e * s /) (s e -s /))) q / s e -s /)) (e (--> s * s * s / q / s e -s / (rnd-pick '(h -q s -e) :encode nil))))) ) (rewrite-lsystem 'llen :depth 2) => (s * e * s / q / s e -s / q / s e -s / s * s * s / q / s e -s / -q -s / s e -s / q / s e -s / * s e -s / q / s e -s / * s e -s / q / s e -s / / q / s e -s / q / s e -s / s * s * s / q / s e -s / -e -s / -e) or => (s e -s / q / s e -s / s * s * s / q / s e -s / -q -s / q / s e -s / q / s e -s / s * s * s / q / s e -s / -e -s / s * e * s / q / s e -s / * s e -s / q / s e -s / * s e -s / q / s e -s / / q / s * e * s / q / s e -s / s * s * s / q / s e -s / h -s / h) . . . (length-lsystem 'llen :depth 2) => (s e -s e t e -s e t e -s t e = = t e -s - - t e -s e t e -s = e -s e t e -s = e -s e t e -s = t e -s e t e -s t e = = t e -s -e -s -e) Best wishes, Janusz Submitter opmo Submitted 06/11/2018 Category Opusmodus Latest Release
  24. opmo

    Opusmodus 1.2.23428

    Any value - an integer, by not a lists.
  25. Implemented in v. 1.2.23418
×