Jump to content

All Activity

This stream auto-updates     

  1. Last week
  2. Timothy Rolls

    Missing libraries and an error message on opening

    Thanks, Janusz. That seems to have also fixed the other problem with my spectral libraries as well. Although, I am a bit confused because I don't ever remember creating a function, let alone one called double, since it seems to be a reserved keyword in so many languages. Anyway, thanks for the help on that. I'm up and running again. Best, Tim
  3. 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.
  4. I'm hoping someone on the forum can help me with this. Since the last update, on my laptop I am unable to use any of my spectral libraries I've created. The tbn-cs one that comes in the app still works, just the ones that I created are not found. I try recreating them and they seem to recreate fine, but after I restart Opusmodus, they still cannot be found. When I check my spectral-data/data and spectral-data/partials, I do see all the necessary files I have created. I think that is happening on my desktop machine, but I can't get to it right now to be sure (I think it was on the desktop that I first found my libraries not being found). However, on both machines, when I first start Opusmodus, I get the following error: > Error: The function double is predefined by Opusmodus. > While executing: ccl::cerror-if-redefine-om, in process Opusmodus Extension Initialization(5). > Type cmd-/ to continue, cmd-. to abort, cmd-\ for a list of available restarts. > If continued: Replace the definition of double. > Type :? for other options. Afterwards, everything not related to my spectral libraries has seemed to run fine. I have not created any extensions, and I cannot find in any of my work where I might have tried to define something as double. I've tried reinstalling Opusmodus and it is not changing anything. Does anyone have any ideas short of reinstalling OSX? I suppose that's a possibility, but I don't want to have to try that till there is no other choice. Thanks. Regards, Tim
  5. syntheso

    syntheso

  6. z1snow2

    z1snow2

  7. Bart

    Bart

  8. maxtuno

    maxtuno

  9. HBaaten

    HBaaten

  10. Earlier
  11. ...how ti filter all "unused/complementary" pitches inside a sieve (if you like to extend the function... could be interesting if it works also with chords) (defun neg-sieve (pitchlist) (let ((pitchlist (pitch-to-midi pitchlist))) (midi-to-pitch (loop for i from (car pitchlist) to (car (last pitchlist)) when (null (member i pitchlist)) collect i)))) (setf sieve '(fs3 g3 as3 b3 c4 cs4 ds4 e4 f4 gs4 a4 d5 eb5 fs5 g5 gs5 bb5 b5 c6 cs6 e6 f6)) (neg-sieve sieve) => (gs3 a3 d4 fs4 g4 bb4 b4 c5 cs5 e5 f5 a5 d6 eb6) (neg-sieve '(c4 d4 e4 fs4 gs4 as4 c5)) => (cs4 eb4 f4 g4 a4 b4)
  12. loopyc

    Opusmodus 1.2.23428

    Cool! Thanks Janusz ;-) Really enjoying 'vector-to-envelope'. Vey much appreciate the examples, very helpful to visualize function differences and possibilities 'at-a-glance' ;-)
  13. opmo

    Opusmodus 1.2.23428

    Any value - an integer, by not a lists.
  14. loopyc

    Opusmodus 1.2.23428

    Concerning: snippet - Audition default parameters. I assume the possible tempo values will be limited to the 'preset' choices as presented in actual 'audition' preference window? Or is it now possible through coding option to have any/all continuous possibilities for the audition tempo value? Free choice of tempo would be very helpful for me, as I mainly work in 'Prime Number' bpm values ;-) Thanks in advance
  15. Implemented in v. 1.2.23418
  16. i think it's better when it's seperate. keep the function/process as simple and clear as possible?
  17. With the next release. I wonder if the result should remove the repeats of single notes: (filter-repeat 1 '(a4 gs4 a4 gs4 a4 fs4 gs4 g5 bb5 g5 g5 g5 gs4 a4 gs4) :seq 2) => (a4 gs4 a4 fs4 gs4 g5 bb5 g5 gs4 a4 gs4)
  18. yes, that's it!! already part of the system?
  19. Filter with sequence option: (filter-repeat 1 '(a4 gs4 a4 gs4 a4 fs4 gs4 g5 bb5 g5 g5 g5 gs4 a4 gs4) :seq 2) => (a4 gs4 a4 fs4 gs4 g5 bb5 g5 g5 g5 gs4 a4 gs4) (filter-repeat 1 '(a4 gs4 a4 gs4 a4 fs4 gs4 g5 bb5 g5 g5 g5 gs4 a4 gs4)) => (a4 gs4 a4 gs4 a4 fs4 gs4 g5 bb5 g5 gs4 a4 gs4) Is this what you are looking for ?
  20. AM

    Opusmodus 1.2.23428

    vector functions -> welcome to stochastic music... who codes an "early-xenakis"-bot? 😂
  21. Stephane Boussuge

    Opusmodus 1.2.23428

    also the new vector functions are awesome ! SB.
  22. loopyc

    Opusmodus 1.2.23428

    What Stephane said :)
  23. Hello, here's one of my personal orchestral template. It use plogue Bidule as host (because some special KeySwitch configuration) and EastWest Hollywood orchestra and East west Convolution reverb (but you can replace it by another one). You can use this template and associated files (soundset etc..) as this or use it as a base for designing you own and take inspiration from it. Attached you will find and audio example of the raw output of the template, the template itself (.opmo), the Bidule file and the soundset necessary to drive this template. Put the BaseOrch4.bidule file into the Instrument/Templates folder from Opmo folder. (create the Template folder if not exist) Put the soundset file BaseOrchestra4.lisp into the Def-soundset folder from opmo folder. Have fun !! SB. TemplateOutExample.mp3 ForumHWBiduleBaseOrchestra.opmo BaseOrch4.bidule BaseOrchestra4.lisp
  24. Stephane Boussuge

    Opusmodus 1.2.23428

    Thank you for this update Janusz, the possibility to specify the snippets audition parameters directly into the code was very useful for me for designing and test instrument by instrument the orchestral template based on EastWest Hollywood orchestra and Plogue Bidule shared into the Template and customisation section. no need to alway click and go to preferences just write some preconfigured code and evaluate it depend on your need Very convenient SB.
  25. 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
  26. opmo

    Opusmodus 1.2.23392

    View File Opusmodus 1.2.23392 New functions: rnd-sum-to-size vector-shift (thanks to Andre Meier) rnd-sum-to-size This function returns a list of numbers which add up to N and a given size (list length). If total was not reached in a given size in a trial, altered numbers are append to the numbers set. (rnd-sum-to-size 11 5 '(1 2 3)) => (2 3 1 3 2) Set random :seed to ensure recurring output: (rnd-sum-to-size 11 5 '(1 2 3) :seed 879) => (1 2 2 3 3) Examples: (rnd-sum-to-size 45 8 '(2 3 5 7 11 13 17 19)) => (2 11 3 5 13 2 2 7) (rnd-sum-to-size 25 7 '(6 11 13 1 3) :seed 436) => (6 3 3 3 1 3 6) (rnd-sum-to-size 25 3 '(6 11 13 1 3) :seed 436) => (11 13 1) (rnd-sum-to-size 25 11 '(6 1 3) :seed 13) => (3 1 1 6 1 1 6 1 3 1 1) (rnd-sum-to-size 45 22 '(1 2 3) :seed 835) => (3 3 3 1 2 3 1 2 2 3 1 2 3 1 1 1 1 3 2 3 2 2) In the next two examples the numbers set is altered: (rnd-sum-to-size 8 7 '(9 8 6) :seed 45) => (1 1 1 1 2 1 1) (rnd-sum-to-size 17 7 '(1 2) :seed 234) => (2 3 1 3 3 3 2) vector-shift This function applies ‘ambitus series’ derived from wave1 and wave2 values into a list of floating-point numbers. Lets examine first how wave1 and wave2 create the ambitus series (low high). We mix the two waves first and then we apply a sort function: (setf wave1 '(-5.1 -2.3 1.5 -0.8 4.6 10.6)) (setf wave2 '(1.0 1.2 -1.1 2.1 -0.3 -2.5)) (sort-asc (gen-mix wave1 wave2)) => ((-5.1 1.0) (-2.3 1.2) (-1.1 1.5) (-0.8 2.1) (-0.3 4.6) (-2.5 10.6)) From the two waves above the function creates five ambitus series each with two lists: start (low high) and end (low high). Start End ((-5.1 1.0) (-2.3 1.2)) ((-2.3 1.2) (-1.1 1.5)) ((-1.1 1.5) (-0.8 2.1)) ((-0.8 2.1) (-0.3 4.6)) ((-0.3 4.6) (-2.5 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: (setf values (gen-white-noise 120)) (/ (length values) 5) => 24 The final process is to select randomly segment numbers for each of the 5 sublists: With :type 1 (rnd-sum 24 '(2 3 5 7 11 13 17 19)) => (2 7 13 2) With :type 2 (length segments) (rnd-sum-to-size 24 8 '(2 3 5 7 11 13 17 19)) => (3 3 3 3 3 3 3 3) Lets see the result: (list-plot (vector-shift wave1 wave2 (gen-white-noise 120))) A slightly different result we can achieve with optional :type 2: (list-plot (vector-shift wave1 wave2 (gen-white-noise 120) :type 2)) Examples: (list-plot (vector-shift '(-7.1 1) '(-0.1 10) (gen-white-noise 356))) (list-plot (vector-shift '(-7.1 1) '(-0.1 10) (gen-white-noise 356) :segment '(1 2 3))) (list-plot (vector-shift '(-7.1 1) '(-0.1 10) (gen-white-noise 356) :segment '(1 2 3) :type 2)) (list-plot (vector-shift '(4.2456284 7.2268248 6.4440737) '(3.682579 8.78879 10.000002) (gen-white-noise 356) :segment (primes 12))) (list-plot (vector-shift '(4.2456284 7.2268248 6.4440737) '(3.682579 8.78879 10.000002) (gen-white-noise 356) :segment (primes 12) :type 2)) (setf wave1 '(-5.1 -2.3 1.5 -0.8 4.6 10.6)) (setf wave2 '(1.0 1.2 -1.1 2.1 -0.3 -2.5)) (list-plot (vector-shift wave1 wave2 (gen-white-noise 356))) (list-plot (vector-shift wave1 wave2 (gen-white-noise 356) :type 2)) (list-plot (vector-shift (rnd 12 :low -1.0 :high 4.0 :seed 45) (rnd 12 :low -1.0 :high 4.0 :seed 23) (gen-white-noise 356) :segment '(1 2 3))) (list-plot (vector-shift (rnd 12 :low -1.0 :high 4.0 :seed 45) (rnd 12 :low -1.0 :high 4.0 :seed 23) (gen-white-noise 356) :segment '(1 2 3) :type 2)) (list-plot (vector-shift (rnd 12 :low -1.0 :high 4.0 :seed 45) (rnd 12 :low -1.0 :high 4.0 :seed 23) (gen-white-noise 356) :segment '(3 6 9))) (list-plot (vector-shift (rnd 12 :low -1.0 :high 4.0 :seed 45) (rnd 12 :low -1.0 :high 4.0 :seed 23) (gen-white-noise 356) :segment (primes 12))) (setf wave3 '(.2 .1 .5 .1 .8 .5 .1 .4 .2 .3)) (list-plot (vector-shift (gen-tendency 24 wave3) (gen-tendency 24 wave3) (gen-tendency 356 wave3) :segment (primes 6))) (list-plot (vector-shift (gen-tendency 24 wave3) (gen-tendency 24 wave3) (gen-tendency 356 wave3) :segment (primes 6) :type 2)) Best wishes, JP Submitter opmo Submitted 06/06/2018 Category Opusmodus Latest Release  
  27. complementation to OR/AND/NOT! i hope everything is correct... https://de.wikipedia.org/wiki/Logikgatter (defun nand (&rest rest) (flet ((every-truep (x) (equal x t))) (not (every #'every-truep rest)))) (nand nil nil nil) => t (nand t t t t t t) => nil (nand nil t t t nil t) => t ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun nor (&rest rest) (contain-itemp 'nil rest)) (nor t t t t) => nil (nor nil t nil) => t (nor t nil nil nil) => t ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun xor (&rest rest) (oddp (car (count-item t rest)))) (xor t nil t t nil nil nil) => t (xor t t nil) => nil (xor nil t) => t ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun xnor (&rest rest) (evenp (car (count-item t rest)))) (xnor t nil t t nil nil nil) => nil (xnor t t nil) => t (xnor nil t) => nil (xnor t nil t t nil nil t nil) => t ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1. Load more activity
×