All Activity

This stream auto-updates   

  1. Last week
  2. Hello, I have been reviewing James Pritchett's The Music of John Cage lately, and was particularly surprised by the detail in which some of the techniques John Cage developed in the 1940s are described such as his "gamut" technique and "chart" technique. I am very curious to see whether you are aware of any attempts to use Opusmodus to create something somewhat similar to these techniques? In theory, the gamut technique is a collection of "sound materials" made before the composition is arranged, and that these sound materials (with varying content, and often containing most of the chords in a piece), while the chart technique is a chart that makes a chart of different possible sounds according to the types of instruments that are used in the piece, only each horizontal axis gives more probability for the appearance of a particular instrument (I wonder if that makes sense). It seems like a good exercise in composition if not anything else, but I'm curious to see how to recreate this in OMN. Otherwise, are there any plans to implement some of John Cage's compositional techniques into OMN's functions? Thanks.
  3. Dear Stephane, Thank you for your fantastic feedback. I remember very well how much you stress the importance of do-timeline. I will also look very carefully at gen-divide and the other examples you mentioned. I sometimes think I need to make my own "headings" inside of Opusmodus with my own explanation for some of the techniques and how they can be applied to my idea of composition. Sometimes, those "headings" I use would change depending on the style I'm trying to compose, too. I guess maybe this is the deeper level of something powerful like Opusmodus: we have so many flexible tools that can do so many things, yet we need to be creative in finding new ways to use those tools to create interesting results. I also need to learn more about the different generative techniques I'm not familiar with personally such as the Rubin Series and the Nørgård Series. It's really fascinating that they are included in Opusmodus, and I guess I need to explore them more. I also want to see if I can use Ircam's AudioSculpt well with Opusmodus instead of Spear. I wonder if there are any benefits of one over the other. I'm just looking into Tristan Murail's process (he used AudioSculpt and OpenMusic), and trying to replicate it in Opusmodus. I hope to start thinking more carefully about these issues so that I can make better use of Opusmodus.
  4. Hi, for such things, i tend to use do-timeline with time resolution parameter (:time keyword). i use also find-bar, replace-bar etc... collection of function. Actually we are in the process of changing many functions in Opusmodus for giving total access of individual omn events. For example, you can now use gen-divide at the event level and it is very useful for micro control. (gen-divide '(2 4 2) '(s c4 ppp d4 pp -q s e4 p f4 mp g4 mf a4 f b4 ff c5 fff)) => ((s c4 ppp d4 pp) (-q s e4 p f4 mp g4 mf) (s a4 f b4 ff) (s c5 fff)) Some over example of omn processing: GEN-TRIM (gen-trim 12 '(q c4 mf e d4 e4)) => (q c4 mf e d4 e4 q c4 e d4 e4 q c4 e d4 e4 q c4 e d4 e4) (gen-trim '(12 4) '((e c4 mf d4) (e e4 mf s f4 g4))) => ((e c4 mf d4 c4 d4 c4 d4 c4 d4 c4 d4 c4 d4) (e e4 mf s f4 g4 e e4)) GEN-REPEAT (gen-repeat 3 '(s c4 q d4)) => (s c4 mf q d4 s c4 q d4 s c4 q d4) (gen-repeat '(3) '(q c4 d4 e4 f4 g4 a4)) => ((q c4 mf c4 c4) (q d4 mf d4 d4) (q e4 mf e4 e4) (q f4 mf f4 f4) (q g4 mf g4 g4) (q a4 mf a4 a4)) (gen-repeat 3 '((q c4 g4) (s c4 a4))) => ((q c4 mf g4) (s c4 mf a4) (q c4 mf g4) (s c4 mf a4) (q c4 mf g4) (s c4 mf a4)) (gen-repeat '(3) '((q c4 e g4) (s c4 a4) (e b4 d5 q fs5))) => ((q c4 mf e g4 q c4 e g4 q c4 e g4) (s c4 mf a4 c4 a4 c4 a4) (e b4 mf d5 q fs5 e b4 d5 q fs5 e b4 d5 q fs5)) (gen-repeat '(3 2) '((q c4 g4) (s c4 a4) (e b4 d5))) => ((q c4 mf g4 c4 g4 c4 g4) (s c4 mf a4 c4 a4) (e b4 mf d5 b4 d5 b4 d5)) GEN-REPEAT-SEQ (gen-repeat-seq 8 1 3 '(q c4 mf e cs4 s d4 s ds4)) => (q c4 mf e cs4 cs4 cs4 s d4 d4 d4 ds4) (gen-repeat-seq '(5 2 7 1) 1 2 '((q c4d4e4f4 p) (s c4 mp fs4) (e c4d4e4f4 f) (e c4 fs4 =) (e c4d4e4f4 p))) => ((q c4d4e4f4 p c4d4e4f4 c4d4e4f4 c4d4e4f4 c4d4e4f4) (s c4 mp fs4) (e c4d4e4f4 f c4d4e4f4 c4d4e4f4 c4d4e4f4 c4d4e4f4 c4d4e4f4 c4d4e4f4) (e c4 f) (e c4d4e4f4 p c4d4e4f4 c4d4e4f4 c4d4e4f4 c4d4e4f4)) SB.
  5. Dear all, I am curious to know whether any of you have any tips or strategies for approaching 'structure' in composition using Opusmodus. I often find that one of the challenges I face while using Opusmodus is that I tend to think in terms of the general structure of the composition and its pertaining restraints. I find it very difficult to think about the microstructures within a piece, mainly I think because I don't know enough about how to approach the idea of microstructures. By this, I mean I generally approach composition within Opusmodus by generating pitches/lengths/articulations, and separating them in terms of sections. However, within each section, I find that I wish I knew of strategies/ideas to generate even more complexity at a very subtle/micro level. Again, I think my main challenge in reaching the next stage in my use of Opusmodus is developing a more clear strategy in regards to structure. I'm very curious to hear how others solve this issue.
  6. MusicXML (Notation): Fixes slur position in grand-staff layout, tempo (text) collision with starting note and tuplet brackets in grand-staff layout if rest length only. New: section and exclude options added to more functions as well as omn processing. Performance improvements (optimisation). best wishes, Janusz
  7. Earlier
  8. Hi, here's the score script of a small piece for piano inspired by my first day in Vienna. SB. Klavier-Gallery-1.opmo
  9. Thank you so much!
  10. Here it is: (defun tmap (tonality) (tonality-map `(,tonality :root b3 :map shift) (make-scale 'c4 12))) (tmap (pcs '3-2)) => (b3 c4 d4 b4 c5 d5 b5 c6 d6 b6 c7 d7)
  11. Sorry if I am not clear - yes the return is what I want. Now I'd like to have a new function that only accepts the collection and returns this same notes. So (newfunction (pcs '3-2)) gives the same result. These are obviously wrong - (defun newfunction (tonality) (tonality-map '((tonality) :root b3 :map shift) (make-scale 'c4 12))) (defun newfunction (tonality) (tonality-map '(tonality :root b3 :map shift) (make-scale 'c4 12))) My goal is to create more complex functions that make use of tonality-map - I realize this might seem unneeded in this simple example - but as the code gets complex I think this function would be helpful for me. Many Thanks!!!
  12. The return is what you are looking for: (tonality-map '((pcs '3-2) :root b3 :map shift) (make-scale 'c4 12)) => (b3 c4 d4 b4 c5 d5 b5 c6 d6 b6 c7 d7) or I don't understand you question
  13. I have a basic lisp question - I'd like to create a function that takes a tonality as its argument and performs something like the following line: (setf test (tonality-map '((pcs '3-2) :root b3 :map shift) (make-scale 'c4 12))) So (defun pitches (tonality) .....) - and then (pitches (pcs '3-2)) would return the list (b3 c4 d4 b4 c5 d5 b5 c6 d6 b6 c7 d7) Thanks so much!
  14. Update to MusicXML notation display. Added functions working with OMN events: GEN-TRIM (gen-trim 12 '(q c4 mf e d4 e4)) => (q c4 mf e d4 e4 q c4 e d4 e4 q c4 e d4 e4 q c4 e d4 e4) (gen-trim '(12 4) '((e c4 mf d4) (e e4 mf s f4 g4))) => ((e c4 mf d4 c4 d4 c4 d4 c4 d4 c4 d4 c4 d4) (e e4 mf s f4 g4 e e4)) GEN-REPEAT (gen-repeat 3 '(s c4 q d4)) => (s c4 mf q d4 s c4 q d4 s c4 q d4) (gen-repeat '(3) '(q c4 d4 e4 f4 g4 a4)) => ((q c4 mf c4 c4) (q d4 mf d4 d4) (q e4 mf e4 e4) (q f4 mf f4 f4) (q g4 mf g4 g4) (q a4 mf a4 a4)) (gen-repeat 3 '((q c4 g4) (s c4 a4))) => ((q c4 mf g4) (s c4 mf a4) (q c4 mf g4) (s c4 mf a4) (q c4 mf g4) (s c4 mf a4)) (gen-repeat '(3) '((q c4 e g4) (s c4 a4) (e b4 d5 q fs5))) => ((q c4 mf e g4 q c4 e g4 q c4 e g4) (s c4 mf a4 c4 a4 c4 a4) (e b4 mf d5 q fs5 e b4 d5 q fs5 e b4 d5 q fs5)) (gen-repeat '(3 2) '((q c4 g4) (s c4 a4) (e b4 d5))) => ((q c4 mf g4 c4 g4 c4 g4) (s c4 mf a4 c4 a4) (e b4 mf d5 b4 d5 b4 d5)) GEN-REPEAT-SEQ (gen-repeat-seq 8 1 3 '(q c4 mf e cs4 s d4 s ds4)) => (q c4 mf e cs4 cs4 cs4 s d4 d4 d4 ds4) (gen-repeat-seq '(5 2 7 1) 1 2 '((q c4d4e4f4 p) (s c4 mp fs4) (e c4d4e4f4 f) (e c4 fs4 =) (e c4d4e4f4 p))) => ((q c4d4e4f4 p c4d4e4f4 c4d4e4f4 c4d4e4f4 c4d4e4f4) (s c4 mp fs4) (e c4d4e4f4 f c4d4e4f4 c4d4e4f4 c4d4e4f4 c4d4e4f4 c4d4e4f4 c4d4e4f4) (e c4 f) (e c4d4e4f4 p c4d4e4f4 c4d4e4f4 c4d4e4f4 c4d4e4f4)) Best wishes, Janusz
  15. single-events => an important function for many things - great, that it's implemented now!
  16. New: single-events sequence [Function] Arguments and Values: sequence omn sequence. Description: The function SINGLE-EVENTS brakes-up an omn sequence into a new list of single events (l p v a). (single-events '(s bb3 leg a3 mp leg g3 a3 f c4 f4 a4)) => ((s bb3 mf leg) (s a3 mp leg) (s g3 mp) (s a3 f) (s c4 f) (s f4 f) (s a4 f)) Examples: (single-events '((s bb3 leg a3 mp leg g3 a3 f c4 f4 a4) (-q s bb4 c5 mf stacc b4 c5 mf d5 eb5 fff f5 eb5 d5))) => (((s bb3 mf leg) (s a3 mp leg) (s g3 mp) (s a3 f) (s c4 f) (s f4 f) (s a4 f)) ((-q) (s bb4 mf) (s c5 mf stacc) (s b4 mf) (s c5 mf) (s d5 mf) (s eb5 fff) (s f5 fff) (s eb5 fff) (s d5 fff))) --------------------------------------------------------------- gen-steps step sequence &key seed [Function] Arguments and Values: step an integer or list of integers (number of steps). sequence a sequence. seed an integer or NIL. The default is NIL. Description: The function GEN-STEPS randomises the order of a sequence and returns it into the original sequence order, after a given number of steps. (gen-steps 12 '(0 1 2 3 4 5 6 7 8 9 10 11) :seed 43) => ((4 2 10 9 4 7 5 0 11 6 1 3) (4 2 2 9 4 7 5 0 11 6 1 3) (4 2 2 9 4 7 5 0 11 6 10 3) (4 2 2 9 4 7 5 0 11 9 10 3) (4 2 2 9 4 7 5 0 8 9 10 3) (4 2 2 9 4 7 5 7 8 9 10 3) (4 2 2 9 4 5 5 7 8 9 10 3) (0 2 2 9 4 5 5 7 8 9 10 3) (0 2 2 9 4 5 5 7 8 9 10 11) (0 2 2 9 4 5 6 7 8 9 10 11) (0 1 2 9 4 5 6 7 8 9 10 11) (0 1 2 3 4 5 6 7 8 9 10 11)) Examples: (gen-steps 6 '(c4 e4 g4 b4 f4 d4 b3) :seed 56) => ((a4 c4 f4 b4 e4 a4 d4) (c4 c4 f4 f4 e4 a4 d4) (c4 c4 f4 f4 e4 a4 b4) (c4 c4 e4 f4 e4 a4 b4) (c4 c4 e4 f4 g4 a4 b4) (c4 d4 e4 f4 g4 a4 b4)) OMN: (gen-steps 7 '(s c4 ppp d4 pp e4 p f4 mp g4 mf a4 f - b4 ff c5 fff) :seed 45) => ((s g4 mf f4 mp c5 fff f4 mp g4 mf c4 ppp a4 f - b4 ff) (s g4 mf f4 mp c5 fff f4 mp g4 mf c4 ppp a4 f - c5 fff) (s g4 mf f4 mp e4 p f4 mp g4 mf c4 ppp a4 f - c5 fff) (s g4 mf d4 pp e4 p f4 mp g4 mf c4 ppp a4 f - c5 fff) (s c4 ppp d4 pp e4 p f4 mp g4 mf a4 f a4 - c5 fff) (s c4 ppp d4 pp e4 p f4 mp g4 mf a4 f - - c5 fff) (s c4 ppp d4 pp e4 p f4 mp g4 mf a4 f - b4 ff c5 fff)) (pitch-variant (gen-steps '(3 4 5 4 3) '(s bb3 p a3 mp g3 a3 f c4 f4 a4 pp -q s bb4 c5 p b4 c5 mf d5 eb5 fff f5 eb5 d5) :seed 67) :variant '? :seed 3567) --------------------------------------------------------------- Added functions working with OMN events: (gen-crossover '((s bb3 p a3 mp g3) (s a3 f c4 f4 a4 pp)) '((-q s bb4 c5 p b4 c5 mf) (s d5 eb5 fff f5 eb5 d5)) :seed 45) => ((s bb3 p a3 mp c5 p b4 c5 mf) (-q s bb4 mf g3 mp) (s eb5 fff f5 eb5 d5) (s d5 mf a3 f c4 f4 a4 pp)) (gen-divide '(2 4 2) '(s c4 ppp d4 pp -q s e4 p f4 mp g4 mf a4 f b4 ff c5 fff)) => ((s c4 ppp d4 pp) (-q s e4 p f4 mp g4 mf) (s a4 f b4 ff) (s c5 fff)) (gen-interleave 2 '(s c4 ppp d4 pp e4 p f4 mp g4 mf a4 f b4 ff c5 fff)) => ((s c4 ppp d4 pp) (s d4 pp e4 p) (s e4 p f4 mp) (s f4 mp g4 mf) (s g4 mf a4 f) (s a4 f b4 ff) (s b4 ff c5 fff)) (gen-interleave '((2) (3)) '((s c4 ppp d4 pp e4 p f4 mp g4 mf a4 f b4 ff c5 fff) (s c4 ppp d4 pp e4 p f4 mp g4 mf a4 f b4 ff c5 fff)) :flatten t) => ((s c4 ppp d4 pp d4 e4 p e4 f4 mp f4 g4 mf g4 a4 f a4 b4 ff b4 c5 fff) (s c4 ppp d4 pp e4 p d4 pp e4 p f4 mp e4 p f4 mp g4 mf f4 mp g4 mf a4 f g4 mf a4 f b4 ff a4 f b4 ff c5 fff)) More to come... --------------------------------------------------------------- Notation: Articulation harm will display above the note now.
  17. Thanks! Torsten
  18. Hi Torsten, no change in EastWest soundsets. Same as before. Best, Stf
  19. Thanks for sharing. Besides the additional files StfConcertOrchestra1.ewi and StfConcertOrchestra1.opmo, are the any changes compared with what you shared before? Best, Torsten
  20. Hi, here's an orchestral template for the EastWest Symphonic Orchestra Sound Bank. In the attachments below, you will find the Opusmodus template file, a EastWest.ewi file with the corresponding instruments in the EastWest Play instrument and all my EastWest soundsets made for this bank. The template and the soundsets can be refined, naturally. If you find this helpful, please, share at least the result. I would be very happy to hear what people do with this stuff. Best wishes SB. StfConcertOrchestra1.ewi EastWest.zip StfConcertOrchestra1.opmo
  21. Ah, thanks!
  22. To share the .rtf files you need to compress the file first, the .rtf format file is a container file.
  23. Velocity symbols displaying correctly now - no more repeat symbols on tied notes.
  24. Hi, here's a short piece i've made while playing with GEN-DYNAMIC-CONTROLLER function. SB. Dynamics2.opmo Dynamics2gm.opmo
  25. Very big "Thank" for this extending num attributes. Didier
  26. Fix to dynamic symbol repeats (one-note-dynamic). Extending the num attribiutes: num0 num1 num2 num3 num4 num5 num6 num7 num8 num9 num10 num11 num12 num-1 num-2 num-3 num-4 num-5 num-6 num-7 num-8 num-9 num-10 num-11 num-12
  27. MIDI controller function: gen-dynamic-controller omn-sequence &key scale loop [Function] Arguments and Values: omn-sequence omn-form sequence. scale a floating point number from 0.1 to 2.0. The default is 1.0. loop Nil or T. The T (true) will loop the scale list to the count of the lists in the sequence. The default is Nil. Description: The GEN-DYNAMIC-CONTROLLER function generates controller values from the omn-sequence dynamic symbols. (setf omn '((h. eb4 pp tasto q g3 0<pp>0 ponte) (-e) (q gs4 fp tasto) (-s) (q a5 ffp) (-e) (q bb4 fffp) (-s) (q cs5 pf) (-s q. e5 fp -e.) (q cs5 p h. d5 pfp) (-q h. c5 pp) (h. gs3 0<ppp>0 ponte -e a4 p< tasto) (h. fs5 mp q bb3 0<pp>0 ponte) (q c5 p tasto h. e4 pfp) (-e) (q cs4 fp h d5 pp>pppp) (h. f4 pp>pppp))) (gen-dynamic-controller omn) => ((36 3/4) (:asc-desc 0 36 1/256 1/4) (0 1/8) (80 1/64) (:desc 30 25 1/256 15/64) (0 1/16) (91 1/64) (:desc 47 25 1/256 15/64) (0 1/8) (102 1/64) (:desc 56 25 1/256 15/64) (0 1/16) (25 1/64) (:asc 30 80 1/256 15/64) (0 1/16) (80 1/64) (:desc 30 25 1/256 23/64) (0 3/16) (47 1/4) (:asc-desc 23 80 1/256 3/4) (0 1/4) (36 3/4) (:asc-desc 0 25 1/256 3/4) (0 1/8) (:asc 47 58 1/256 1/8) (58 3/4) (:asc-desc 0 36 1/256 1/4) (47 1/4) (:asc-desc 23 80 1/256 3/4) (0 1/8) (80 1/64) (:desc 30 25 1/256 15/64) (:desc 36 14 1/256 1/2) (:desc 36 14 1/256 3/4)) This is the notation of the sequence, see above: Audio: Virtual Instrument: VSL: Violin Solo. The dynamic controller values are sent to CC11: Expression Examples: To scale up the controller values we set the :scale value higher than 1.0. To scale down the controller values we set the :scale value lower than 1.0. Here the scale value is 1.2: (gen-dynamic-controller omn :scale 1.2) => ((43 3/4) (:asc-desc 0 43 1/256 1/4) (0 1/8) (96 1/64) (:desc 36 30 1/256 15/64) (0 1/16) (109 1/64) (:desc 56 30 1/256 15/64) (0 1/8) (122 1/64) (:desc 67 30 1/256 15/64) (0 1/16) (30 1/64) (:asc 36 96 1/256 15/64) (0 1/16) (96 1/64) (:desc 36 30 1/256 23/64) (0 3/16) (56 1/4) (:asc-desc 24 96 1/256 3/4) (0 1/4) (43 3/4) (:asc-desc 0 30 1/256 3/4) (0 1/8) (:asc 56 70 1/256 1/8) (70 3/4) (:asc-desc 0 43 1/256 1/4) (56 1/4) (:asc-desc 24 96 1/256 3/4) (0 1/8) (96 1/64) (:desc 36 30 1/256 15/64) (:desc 43 17 1/256 1/2) (:desc 43 17 1/256 3/4)) To add more control to the dynamic of the sequence we can set each bar (a list) with their own scale value. In the example below the 4th value 1.0 will stay for all of the remaining bars (lists). (gen-dynamic-controller omn :scale '(1.0 1.1 1.2 1.0)) Adding loop to the scale keyword we are looping the scale values to the count of the lists in the sequence: (gen-dynamic-controller omn :scale '(1.0 1.1 1.2 1.0) :loop t) ;;;--------------------------------------------------------- ;;; SCORE EXAMPLE ;;;--------------------------------------------------------- It is important to use the same omn-sequence data that you are using in the DEF-SCORE instrument instance. (setf omn '((h. eb4 pp tasto q g3 0<pp>0 ponte) (-e) (q gs4 fp tasto) (-s) (q a5 ffp) (-e) (q bb4 fffp) (-s) (q cs5 pf) (-s q. e5 fp -e.) (q cs5 p h. d5 pfp) (-q h. c5 pp) (h. gs3 0<ppp>0 ponte -e a4 p< tasto) (h. fs5 mp q bb3 0<pp>0 ponte) (q c5 p tasto h. e4 pfp) (-e) (q cs4 fp h d5 pp>pppp) (h. f4 pp>pppp))) GM sound set: (def-score dynamic (:key-signature 'chromatic :time-signature (get-time-signature omn) :tempo 32 :layout (violin-layout 'vln)) (vln :omn omn :channel 1 :sound 'gm :volume 127 :program 'violin :controllers (11 (gen-dynamic-controller omn))) ) VSL sound set: (def-score dynamic (:key-signature 'chromatic :time-signature (get-time-signature omn) :tempo 32 :layout (violin-layout 'vln)) (vln :omn omn :port 0 :channel 1 :sound 'vsl-violin-solo :volume 127 :controllers (11 (gen-dynamic-controller omn))) ) --- best wishes, Janusz
  1. Load more activity