Jump to content

All Activity

This stream auto-updates     

  1. Last week
  2. Thank you ! It worked ! Best ! Julio
  3. This short example demonstrates how powerful and flexible the UNFOLD concept is, especially when working with short patterns. The entire process is very compact and requires only a few lines of code. Source: (progn (setf mat1 '((h. eb4 pp q g3 -e q gs4 mf -s a5 p tie) (e. a5 -e q bb4 mf -s q cs5 p -s q. e5 mf -e.) (q cs5 p h. d5 mf -q c5 pp tie) (h c5 pp h. gs3 -e a4 p<) (h. fs5 mp q bb3 c5 p e4 mf tie) (h e4 -e q cs4 mp h d5 p e f4)) mat2 '((q d4 pp s eb4 < leg g4 < leg bb4 < leg a4 q. cs5 mf -e 3q gs5 > leg fs5 > leg c5 > b4 > leg f4 leg e4) (t d4 < leg eb4 < leg g4 < leg bb4 q. a4 marc t fs4 mf leg gs4 leg e. c5 e b4 t f5 leg e5 leg d5 leg eb5 3q bb5 > a4 > bb5 > e a4 pp stacc -e)) p01 (unfold 'eg '(t7 dyn) mat1) p02 (unfold 'eg '(t7 v? dyn ob) mat1) p03 (unfold 'eg '(v? ra dyn) mat1) p04 (unfold 'eg '(t-12 t-5 dyn v? raf hn) p03) p05 (unfold 'eg '(t-12 t-5 ld ra dyn bn) p02) p11 (assemble-seq (unfold 'eg '(t7 dyn) mat1) (unfold 'eg '(t7 dyn) mat2)) p12 (assemble-seq (unfold 'eg '(t-12 v? dyn ob) mat1) (unfold 'eg '(t-12 v? dyn ob) mat2)) p13 (assemble-seq (unfold 'eg '(v? raf dyn) mat1) (unfold 'eg '(v? dyn) mat2)) p14 (unfold 'eg '(t-12 t-5 dyn v? raf dyn hn) p13) p15 (unfold 'eg '(t-12 t-5 ld ra dyn bn) p12)) (ps 'gm :w5 (list (assemble-seq p01 p11) (assemble-seq p02 p12) (assemble-seq p03 p13) (assemble-seq p04 p14) (assemble-seq p05 p15)))) Output: Best, JP
  4. The 'Check for Update...' is working again.
  5. The sieves are marvelous to Xenakis-like music processes ! Thank you !! Best ! Julio
  6. opmo

    Using OSC

    PLEASE NOTE! The changes to OSC implementation - see below - are thanks to Rangarajan Krishnamoorthy. If you use OSC threads please revise your OSC files and make the necessary adjustments.
  7. – New functions: get-sieve-tree sieve-merge sieve-tree-series sieve-tree sieve pick-prob gen-prob create-osc-thread get-osc-thread-from-name send-osc-data osc-thread-alive? end-all-osc-threads end-osc-thread – Howto Score/OSC/OSC Threads.opmo – Changes to OSC functions, please check the new OSC documents if you use OSC. – Musicxml display improvements. SIEVE-TREE This function returns a sequence of lengths symbols derived from tree-data in a given root, node and level number. Examples: Low density output: (sieve-tree 32 2 3) With a smaller root number and a higher level number we increase the density: (sieve-tree 8 2 5) In the following example we add probability values using lists of paired values to node, level and rest parameters. The first value in the rest lists is a percentage value of the length-rests in a node-level list. (sieve-tree '(4 2) '((2 0.43) (3 0.37)) '((3 0.47) (4 0.56) (5 0.68)) :rest '((20 0.43) (80 0.6) (0 0.7)) :quantize '(1 2 3 4 5 7)) Here we are increasing the length-rest probability and set the quantize to quarter, eight and quintuplet only: (sieve-tree '(4 2) '((2 0.43) (3 0.37)) '((3 0.47) (4 0.56) (5 0.68)) :rest '((20 0.43) (80 0.6) (90 0.7)) :quantize '(1 2 5)) The expression below will generate 96 bars of gradual increase in the density: (sieve-tree 96 2 7 :seed 43) Let's examine the original tree-data from the expression above. To do that we call the GET-SIEVE-TREE function with the same tree values: (get-sieve-tree 96 2 7) SIEVE-TREE-SERIES SIEVE-TREE-SERIES returns a sequence of lengths symbols derived from a series of tree-data in a given root, node and level number. This function allows you to control individual tree-data parameters ie. density results. Please note, every parameter has a keyword, except the root number. Examples: (sieve-tree-series '((8 :node 2 :level ((3 0.47) (4 0.56) (5 0.68)) :rest ((40 0.43) (80 0.6) (0 0.7)) :quantize (1 2 4)) (3 :node 2 :level ((3 0.47) (4 0.56) (5 0.68)) :quantize (1 2 3 5 6)) (2 :node 3 :level ((4 0.46) (5 0.58)) :seed 23))) (sieve-tree-series '((2 :node 2 :level ((4 0.47) (5 0.66)) :rest ((40 0.43) (80 0.6) (0 0.7))) (8 :node 2 :level ((3 0.47) (4 0.56)) :quantize (1 2 3 5 6)) (3 :node 3 :level ((4 0.46) (5 0.58)) :rest ((40 0.43) (80 0.6) (0 0.7))))) GET-SIEVE-TREE GET-SIEVE-TREE returns a tree node degree data from a given root, node and level number. This function is useful for analysis of the original tree-data used in the SIEVE-TREE function. Examples: (get-sieve-tree 96 2 1) => ((48 48)) (get-sieve-tree 96 3 1) => ((32 32 32)) (get-sieve-tree 96 2 2) => (((24 24) (16 16 16))) (get-sieve-tree 96 3 2) => (((32) (16 16) (32/3 32/3 32/3))) (get-sieve-tree 96 2 3) => (((12 12) (8 8 8)) ((16) (8 8) (16/3 16/3 16/3))) (get-sieve-tree 96 3 3) => (((16 16)) ((8 8) (16/3 16/3 16/3)) ((32/3) (16/3 16/3) (32/9 32/9 32/9))) (get-sieve-tree 96 2 5) => (((3 3) (2 2 2)) ((4) (2 2) (4/3 4/3 4/3)) ((4 4)) ((2 2) (4/3 4/3 4/3)) ((8/3) (4/3 4/3) (8/9 8/9 8/9)) ((4 4) (8/3 8/3 8/3)) ((2 2) (4/3 4/3 4/3)) ((8/3) (4/3 4/3) (8/9 8/9 8/9)) ((8/3 8/3)) ((4/3 4/3) (8/9 8/9 8/9)) ((16/9) (8/9 8/9) (16/27 16/27 16/27))) SIEVE-TREE example with root 8, node 2 and level 5: (sieve-tree 8 2 5) Analysis of the above tree-data: (get-sieve-tree 8 2 5) => (((1/4 1/4) (1/6 1/6 1/6)) ((1/3) (1/6 1/6) (1/9 1/9 1/9)) ((1/3 1/3)) ((1/6 1/6) (1/9 1/9 1/9)) ((2/9) (1/9 1/9) (2/27 2/27 2/27)) ((1/3 1/3) (2/9 2/9 2/9)) ((1/6 1/6) (1/9 1/9 1/9)) ((2/9) (1/9 1/9) (2/27 2/27 2/27)) ((2/9 2/9)) ((1/9 1/9) (2/27 2/27 2/27)) ((4/27) (2/27 2/27) (4/81 4/81 4/81))) SIEVE SIEVE returns a list of numbers to a given modulus, shift and maximum number. This function can be useful in generating root numbers for the SIEVE-TREE function. (sieve 4 0 96) => (0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96) Examples: (sieve 2 0 60) => (0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60) (sieve 2 1 60) => (1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59) Example with SIEVE-TREE function: (sieve-tree (sieve 3 4 14) '((2 0.43) (3 0.37)) '((3 0.47) (4 0.56) (5 0.68)) :rest '((20 0.43) (80 0.6) (90 0.7))) SIEVE-MERGE SIEVE-MERGE returns a list of numbers derived from merging a number of sieve lists. This function can be useful in generating root numbers for the SIEVE-TREE function. Examples: Here we merge two sieve lists, one from (sieve 3 0 96) and one from (sieve 4 0 96): (sieve-merge '(3 0 4 0) 96) => (0 3 4 6 8 9 12 15 16 18 20 21 24 27 28 30 32 33 36 39 40 42 44 45 48 51 52 54 56 57 60 63 64 66 68 69 72 75 76 78 80 81 84 87 88 90 92 93 96) Example with SIEVE-TREE and SIEVE-MERGE function: (sieve-tree (sieve-merge '(3 2 4 2) 12) '((2 0.43) (3 0.37)) '((3 0.47) (4 0.56) (5 0.68)) :quantize '(1 2 4 8)) PLEASE NOTE! The changes to OSC implementation - see below - are thanks to Rangarajan Krishnamoorthy. If you use OSC threads please revise your OSC files and make the necessary adjustments. The CREATE-OSC-THREAD function creates the OSC thread with a given target. Here we assign a name Reaktor to a remote-host: 127.0.0.1 and remote-port: 10000: (defparameter reaktor '(127.0.0.1 10000)) Here we assign an variable to our OSC thread object, this is important for sending the data with the thread and for ending the thread: (setf thd1 (create-osc-thread "thread1" reaktor)) To send OSC messages with the thread we call the SEND-OSC-DATA function: (send-osc-data thd1 '((0.0 1/2) (0.0 1/2) (0.08238555 2) (0.10876829 1) (0.12127061 11/2))) To end the OSC thread and the sending of the OSC messages, we call the END-OSC-THREAD function: (end-osc-thread thd1) The SEND-OSC-THREAD function sends OSC data and performs a small amount of "background" processing on messages in the queue when the processor would otherwise be idle. This function can be called on a created thread any number of times during its lifetime. (defparameter reaktor '(127.0.0.1 10000)) (defparameter time (rnd-sample 50 '(1/4 1/2 1/4))) (defparameter values (vector-smooth 0.05 (gen-white-noise 500))) (defparameter data (gen-osc-data 60 values :time time)) (setf thd1 (create-osc-thread "thread1" reaktor)) (send-osc-data thd1 data) The GET-OSC-THREAD-FROM-NAME function returns the OSC thread from a given name. This function is useful if you don’t assign a variable to the thread object. Note we are not capturing the thread object returned from this function: (create-osc-thread "thread1" reaktor) We can get the thread object using its name when we want: (send-osc-data (get-osc-thread-from-name "thread1") '((0.0 1/2) (0.3254655 1/2) (0.08238555 2) (0.10876829 1) (0.12127061 11/2))) (end-osc-thread (get-osc-thread-from-name "thread1")) The OSC-THREAD-ALIVE? function checks if the given OSC thread object is still alive and returns T if true. (setf thd1 (create-osc-thread "thread1" '(127.0.0.1 10000))) (end-osc-thread thd1) => nil Test: (osc-thread-alive? thd1) => nil The END-OSC-THREAD function will end and destroy a given OSC thread. After the thread is destroyed, you cannot send any messages to it. (setf thd1 (create-osc-thread "thread1" '(127.0.0.1 10000))) (end-osc-thread thd1) => nil Test: (osc-thread-alive? thd1) => nil The END-ALL-OSC-THREADS function will end and destroy all OSC threads. You cannot send any messages to the threads once they are destroyed. (defparameter reaktor '(127.0.0.1 10000)) (create-osc-thread "thread1" reaktor) (create-osc-thread "thread2" reaktor) (create-osc-thread "thread3" reaktor) (create-osc-thread "thread4" reaktor) (end-all-osc-threads) => nil Best wishes, Janusz
  8. increase the step value to 1/128.
  9. Since the tempo slot in DefScore only takes integers, what would be the best way to get a more natural playback tempo? I'm using this method now but it doesn't sound very smooth. (setf tempo-4 (make-tempo (vector-round 58 61 (gen-white-noise 12)) left :type :length)) ;Left is the output of an assemble-seq I've also tried things like this: (setf tempo-2 '(("Mixed Tempi" q :accel 60 62 1/32 2) ("Mixed Tempi" q :accel 62 60 1/32 2) (:rit 60 64 1/32 12))) But most of it sounds either too intentional or too clunky, I just want the tempo to very slightly meander. Thanks in advance for the advice!
  10. Earlier
  11. ngwese

    ngwese

  12. AM

    maxmsp and lisp?

    the only problem seems to be, that it only works with CCL 1.12 on mojave... but this is not the official actual version in apple's appstore. so it don't work with 1.11.... does anyone know how to fix this problem?
  13. Hi, it would be great to be able to connect Opusmodus to Max/Msp like we already do from Opusmodus to Emacs and Slime. I don't know if it is possible but may be somebody on this forum ?.... SB.
  14. To save the graph in .opmograph format, simply click on the graph and select "Save As..." form the File menu. By default the file will be saved in the "~/Opusmodus/Graphs" folder.
  15. 1.3.24720 – Update to 'Quick Start' workspace. – Added controllers keyword :cc into PS. How to update the Quick Start workspace. Delete the 'Quick Start' folder from the "~/Opusmodus" directory. Goto the Help menu and select 'Install Quick Start Workspace'. The updated 'Quick Start' workspace will open. This way you can always rebuild your 'Quick Start' workspace to the default one if needed. Best wishes, Janusz
  16. Opusmodus musicxml file is very much to the spec (standard), many other programs are not, this is why you will get an occasional error or missing parameter in programs like Musescore or Dorico.
  17. AM

    maxmsp and lisp?

    dear all does anyone have experience with an implementation of LISP in maxmsp? i'm looking for: "Max handling real time input, output, timing and control, letting Lisp handle variable handling and of course the processing of large amounts of data" does anyone tested this? https://github.com/thealexgraham/lisper/blob/master/README.md https://cycling74.com thanx for a hint andré
  18. When I try to open an XML file generated in Opusmodus snippet in Musescore 3, I get a message (File Corrupted). I have to open it in Finale and then export as XML. After that I can open it in Musescore. I do´t know why... But I decided to report it to you. Best, Julio
  19. Rangarajan

    Using OSC

    Dear Janusz, Thanks a lot for your answers! Regards, Rangarajan
  20. opmo

    Using OSC

    Yes, 1/2 equal 1/2 second. Yes, after the last thread pair is send the thread will destroy by itself. Yes, this function will display all running threads: (bt:all-threads) The function: (stop-osc-threads a-thread) will destroy the given OSC thread. The function: (stop-all-osc-threads) will destroy all OSC threads. No, In order to restart a thread again you need to evaluate the expression again, example: (sets thread1 (osc-thread reaktor "osc1" '((0.18450676 5/2))) No, but you could create a loop with repeat function for a given count. Best wishes, Janusz
  21. Will save the result in pdf file format in ~/Opusmodus/Graphs folder. (circle-rhythm-plot '(0 3 6 10 11) :points 16 :file "crp1") or Click the mouse on the graph-view to copy it to the clipboard (PNG format). This allow you to past the image to any other document - works with display-midi view as well.
  22. Dear All, There is a way of exporting the graphic Circle rhythm plots, like an easy shortcut, as we have with the snippets (to XML or MIDI) ? Thanks ! Best, Julio
  23. Dear Julio, Thanks for sharing these codes. So I'm trying to understand if the following approach could work - it seems to work for your example (but not for every progression). (setf chordstovl2 '(b3eb5g3 cs6e7gs3 b4f5g6 f7e5c2 d4f7e4 gs7e2a8)) (defun voicelead (chords) (chord-closest-path (list (car chords)) chords)) (voicelead (ambitus '(c4 c5) chordstovl2)) but (voicelead (harmonic-progression '(0 3 6 2) '(c major) :size 4 :step 2 :relative nil :variant 'r)) can generate one of two options. The second one is obviously better since it uses a common tone. Even with ambitus-chord I'm not able to make it work consistently. If you have any thoughts I'd be happy to hear them. All the best, Avner
  24. Rangarajan

    Using OSC

    Janusz, While I am waiting for your reply to my earlier queries, I want to ask one more doubt. The "osc-thread" function takes a finite list of data to be transmitted to the receiving controller. What if I want to send data continuously in a loop (like - forever)? Regards, Rangarajan
  25. Yes, for analysis GET-DENSITY and for composition FILTER-DENSITY.
  1. Load more activity
×
×
  • Create New...