Jump to content

Leaderboard


Popular Content

Showing content with the highest reputation since 08/21/2018 in all areas

  1. 3 points
    Here's a draft of an Orchestral piece made in Opusmodus. SB.
  2. 3 points
    opmo

    Idea for a Rhythmic Set Theory Function

    pcs-rhythm (pcs &key points invert (rotate 0) (value 1/16) legato omn) (pcs-rhythm '3-11 :invert t :points 9 :omn t) => (-s = = - = = = - =) (pcs-rhythm '3-11 :invert t :points 9 :rotate 7 :omn t) => (s = - = = = = - =) (pcs-rhythm '3-11 :points 9 :legato t :omn t) => (e. q e) ;; Interval list to prime-form: (pcs-prime-form '(2 5 7 11)) => (0 3 6 8) (pcs-rhythm '(2 5 7 11) :omn t) => (s - - = - - = - = - - -) (pcs-rhythm '(2 5 7 11) :rotate 7 :omn t) => (-s = - = - - - = - - = -) (pcs-rhythm '(3-11 6-5) :points '(8 9) :omn t) => ((s - - = - - - =) (s = = = - - = = -)) (pcs-rhythm '((2 5 7 11) (1 6 3 9 2)) :omn t) => ((s - - = - - = - = - - -) (s = = - - = - - = - - -)) and (pcs-rhythm '(3-11 6-21) :points '(8 9 7 9) :rotate '(0 1 2 3) :legato '(0 1 1 0) :value '(s e s 3q) :omn t) => ((s - - = - - - =) (-e q e = q =) (-e e. e) (-3q - - = - = = = -)) (pcs-rhythm '3-11 :rotate '(0 1 2 3 4 5 6 7 8 9 10 11) :omn t) => (( s - - = - - - = - - - -) (-s = - - = - - - = - - -) (-s - = - - = - - - = - -) (-s - - = - - = - - - = -) (-s - - - = - - = - - - =) ( s - - - - = - - = - - -) (-s = - - - - = - - = - -) (-s - = - - - - = - - = -) (-s - - = - - - - = - - =) ( s - - - = - - - - = - -) (-s = - - - = - - - - = -) (-s - = - - - = - - - - =)) (pcs-rhythm '(6-z25b 6-z41b) :points '(9 8) :omn t) => ((s - = = - = - = =) (s - = - - = = =)) (pcs-rhythm '(6-z39 5-13 4-24 6-9) :rotate '(0 3 9 2) :omn t) => ((s - = = = = - - = - - -) (-s - - = = = - = - - - =) (-s = - - - = - - - = - =) (-s - = = = = - = - = - -)) There is an error in the 3rd bar, it should read: 4-24(s)R9 3rd bar: with 4-24(s)R8
  3. 2 points
    Of course you can use omn chords as well: (pcs-rhythm '(c4ds4e4bb4 eb4fs4e4g4eb4d4cs4) :omn t) => ((s - = - - = = - - - - -) (s = = = - = = - - - - -))
  4. 2 points
    opmo

    Idea for a Rhythmic Set Theory Function

    Example with chord symbols: (pcs-rhythm '(7b9s11 9s11 7) :omn t) => ((s - = = - - = - = = - -) (s - = - = - = - = = - -) (s - - = - - = - = - - -))
  5. 2 points
    Stephane Boussuge

    Pattern for Piano

    New short piano piece from "3 Pièces pour Piano". SB.
  6. 2 points
    A string quartet composed in 2016 already posted on this Forum but for that video, the midi rendering is from Note Performer 3 in Dorico. SB.
  7. 1 point
    Thanks Julio ! S.
  8. 1 point
    Great work, Stephane ! Congrats ! Julio
  9. 1 point
    AM

    inserting a sequence by overwriting

    hi all the following function could be usefull, it's a first sketch, but it seems to work.... if you want to INSERT a new OMN-seq, perhaps in bar 2 on the 3/20 in your BASIC-OMN-sequence... with this function you can do this, it will overwrite your original phrase. test it or tell me whatelse would be better... greetings andré ;;; ------------------------------------------------------------------------ ;;; INSERTING SEQ BY OVERWRITING ;;; ------------------------------------------------------------------------ ;;; SUB (defun get-resolution2 (beat) (cond ((memberp (cadr beat) '(3 6 12 24 48)) 1/24) ((memberp (cadr beat) '(1 2 4 8 16 32)) 1/16) ((memberp (cadr beat) '(5 10 20 40)) 1/20) ((memberp (cadr beat) '(7 14 28 56)) 1/28))) ;;; MAIN: INSERTING SEQ BY OVERWRITING (defun inserting-on-bar/beat* (seq &key insert time-sign bar beat) (let ((resolution (get-resolution2 beat)) (ord-time-sign time-sign) (time-sign (if (listp (car time-sign)) (loop for i in time-sign when (> (caddr i) 1) append (loop repeat (caddr i) collect (list (car i) (cadr i))) else collect (list (car i) (cadr i))) (append time-sign))) (distance (if (listp (car time-sign)) (+ (car (loop repeat (- bar 1) for i in time-sign collect (/ (* (1- bar) (/ (car i) (cadr i))) (get-resolution2 beat)))) (/ (/ (1- (car beat)) (cadr beat)) (get-resolution2 beat))) (+ (/ (* (1- bar) (/ (car time-sign) (cadr time-sign))) (get-resolution2 beat)) (/ (/ (1- (car beat)) (cadr beat)) (get-resolution2 beat)))))) (omn-to-time-signature (omn-merge-ties (flatten (loop repeat (length (omn-to-time-signature seq (list (numerator resolution) (denominator resolution)))) for cnt = 0 then (incf cnt) with new-seq = (omn-to-time-signature seq (list (numerator resolution) (denominator resolution))) with insert-rounded = (append insert (rest (length-rational-quantize (list (apply '+ (omn :length insert))) :round resolution))) when (= cnt distance) collect insert-rounded and do (setf cnt (+ (/ (get-span (flatten insert-rounded)) resolution) cnt -1)) else collect (nth cnt new-seq)))) ord-time-sign))) ;;; EXAMPLES (inserting-on-bar/beat* '((e c6 a5 h b5 tie) (q b5 b5 a5 tie) (h a5 q a5) (h. g5)) :insert '(s f3 e3 eb3 d3) :time-sign '(3 4) :bar 2 :beat '(2 16)) (inserting-on-bar/beat* '((e c6 a5 h b5 tie) (q b5 b5 a5 tie) (h a5 q a5) (h. g5)) :insert '(3q c5 b4 bb4 a4) :time-sign '(3 4) :bar 1 :beat '(2 12)) ;;; EXAMPLE WITH different TIME-SIGNATURES (inserting-on-bar/beat* '(e c6 a5 h b5 tie q b5 b5 a5 tie h a5 q a5 h. g5) :insert '(5q c5 b4 bb4 a4) :time-sign '((2 4 1) (3 8 1) (5 8 1) (3 4 1)) :bar 3 :beat '(3 20))
  10. 1 point
    AM

    rnd-complete-seq

    ;; a function which fills up a sequence randomly - max-length = length sequence ;; (regardless of the number of cycles) (defun rnd-complete-seq (n &key sequence (step 1) seed (sort '<) (exclude nil) (append-excluded nil)) (let* ((testseq) (sequence (if (null exclude) sequence (filter-remove exclude sequence))) (sequence (loop repeat (length sequence) with sequence = (loop repeat n with seq = '() do (setf seq (append (rnd-unique step sequence :seed seed) seq)) do (setf sequence (filter-remove seq sequence)) collect seq) for i in (if (equal sort '<) (sort-asc sequence) (sort-desc sequence)) collect i))) (if (null append-excluded) sequence (progn (cond ((pitchp (first (car (last sequence)))) (setf testseq (pitch-to-midi sequence))) ((velocityp (first (car (last sequence)))) (setf testseq (get-velocity sequence))) (t (setf testseq sequence))) (if (< (first (car (last testseq))) (second (car (last testseq)))) (list sequence (sort-asc (append exclude (car (last sequence))))) (list sequence (sort-desc (append exclude (car (last sequence)))))))))) ;;; EXAMPLES (rnd-complete-seq 8 :sequence (expand-tonality '(b3 messiaen-mode6))) => ((b3) (b3 a4) (b3 a4 as4) (b3 f4 a4 as4) (b3 e4 f4 a4 as4) (b3 cs4 e4 f4 a4 as4) (b3 cs4 ds4 e4 f4 a4 as4) (b3 cs4 ds4 e4 f4 g4 a4 as4)) ;or => ((as4) (e4 as4) (e4 f4 as4) (cs4 e4 f4 as4) (cs4 e4 f4 g4 as4) (b3 cs4 e4 f4 g4 as4) (b3 cs4 ds4 e4 f4 g4 as4) (b3 cs4 ds4 e4 f4 g4 a4 as4)) ;or .... (rnd-complete-seq 5 :sequence '(0 1 2 3 4 5 6 7 8 9 10 11 12)) => ((1) (1 7) (0 1 7) (0 1 7 9) (0 1 7 9 11)) ;or => ((0) (0 1) (0 1 11) (0 1 6 11) (0 1 6 11 12)) ;or .... (rnd-complete-seq 5 :step 2 :sequence '(0 1 2 3 4 5 6 7 8 9 10 11 12)) => ((1 7) (0 1 7 8) (0 1 5 7 8 12) (0 1 5 7 8 9 10 12) (0 1 2 5 7 8 9 10 11 12)) (rnd-complete-seq 5 :step 2 :sequence '(0 1 2 3 4 5 6 7 8 9 10 11 12) :seed 234) => ((4 12) (3 4 11 12) (2 3 4 10 11 12) (2 3 4 5 9 10 11 12) (1 2 3 4 5 8 9 10 11 12)) (rnd-complete-seq 5 :step 2 :sequence '(0 1 2 3 4 5 6 7 8 9 10 11 12) :sort '> :seed 234) => ((12 4) (12 11 4 3) (12 11 10 4 3 2) (12 11 10 9 5 4 3 2) (12 11 10 9 8 5 4 3 2 1)) (rnd-complete-seq 5 :step 2 :sequence '(pppp ppp pp p mp mf f ff fff ffff) :sort '> :seed 234) => ((ffff p) (ffff fff p pp) (ffff fff ff p pp ppp) (ffff fff ff f mp p pp ppp) (ffff fff ff f mf mp p pp ppp pppp)) ;;; examples with EXCLUDE (rnd-complete-seq 4 :sequence '(1 2 3 4 5 6 7 8) :exclude '(1 8)) => ((5) (4 5) (2 4 5) (2 4 5 6)) (rnd-complete-seq 4 :sequence '(1 2 3 4 5 6 7 8) :exclude '(1 8) :append-excluded t) => (((7) (4 7) (4 5 7) (4 5 6 7)) (1 4 5 6 7 8)) (rnd-complete-seq 4 :sequence '(pppp ppp pp p mp mf f ff fff ffff) :exclude '(pppp ffff) :append-excluded t) => (((mf) (p mf) (ppp p mf) (ppp p mf f)) (pppp ppp p mf f ffff))
  11. 1 point
    Very interesting André. I would like very much if Janusz improve and add this and your get-position function into the system 🙂 Janusz ? 🙂 🙂 🙂 Thank you André for that. S.
  12. 1 point
    Stephane Boussuge

    Pattern for Piano

    No, chords are rotational intervals addition, dependant to the type of lentgh. I've used for that my function: add-interval-if-length revised by Torsten. Here it is: ;;; ============================================== ;;; UTILITY FUNCTIONS ;;; (defun add-interval-if-length-aux (omn &key (test #'>) (length-val 1/8) (interval-list '(4 3 4 7 4 3 5 4 7 3))) (let ((s-events (single-events omn))) (loop for e in s-events for i in (gen-trim (length s-events) interval-list) when (funcall test (omn-encode (first e)) length-val) append (omn-replace :pitch (chord-interval-add (list i) (list (second e))) e) else append e))) ;(add-interval-if-length-aux '(q c4 d4 e4 f4 e g4 a4) :interval-list '(10 11)) ;;; ============================= ;;; MAIN FUNCTION (defun add-interval-if-length (omn &key (test #'>) (length-val 1/8) (interval-list '(4 3 4 7 4 3 5 4 7 3))) (do-verbose ("add-interval-if-length") (let ((test-fn (case test (> #'>) (< #'<) (= #'=) (otherwise test)))) (if (listp (car omn)) (mapcar #'(lambda (x) (add-interval-if-length-aux x :test test-fn :length-val (omn-encode length-val) :interval-list interval-list)) omn) (add-interval-if-length-aux omn :test test-fn :length-val (omn-encode length-val) :interval-list interval-list))))) ;(add-interval-if-length '((q c4 d4 e4 f4 e g4 a4) (e f4 e4 q d4 c4 a4 g4 f4)) :interval-list '(10 11)) ;(add-interval-if-length '((q c4 d4 e4 f4 e g4 a4) (e f4 e4 q d4 c4 a4 g4 h f4)) :interval-list '(3 4) :test #'>= :length-val 'q) All the best S.
  13. 1 point
    Stephane Boussuge

    Pattern for Piano

    Hi Julio, It is mainly based on continuous variation on 2 Slonimsky patterns. best S.
  14. 1 point
    I am glad the complete catalogue is correct 🙂 Great work.
  15. 1 point
    Works with tuplets, section and exclude. Now: value 1/16 on 1/12 = 1/24 value 1/16 on 3/20 = 1/20 etc... Here are the final function results: length-staccato (sequence &key (value 1/16) section exclude omn) (length-staccato '(q - = =) :omn t) => (s -e. -q s -e. s -e.) (length-staccato '(3q -3q 3q 3q 3q 3q) :omn t) => (3q - = = = =) (length-staccato '((3q g4 gs4 a4 tie) (3q a4 b4 c5))) => ((3q g4 gs4 a4 tie) (-3q b4 c5)) (length-staccato '(5q f4 - === 3q g4 = a4)) => (5q f4 - f4 -5h 3q g4 g4 a4) (length-staccato '((q c4 -q e d4 q e4 q f4 tie) (5q f4 - === 3q g4 = a4 tie) (q a4 tie e a4 -q q b4 tie) (q b4 -q e c5 e d5 tie) (e d5 -q e5 q f5 q g5))) => ((s c4 -e. -q s d4 - e4 -e. s f4 tie -e.) (-5q - f4 -5h 3q g4 g4 a4 tie) (-q. -q s b4 tie -e.) (-q - s c5 - d5 tie -) (-e - - s e5 -e. s f5 -e. s g5 -e.)) (length-staccato '(q e4 mp q tasto q -q q q)) => (s e4 mp -e. s e4 tasto -e. s e4 -e. -q s e4 -e. s e4 -e.) (length-staccato '((q c4 -q e d4 q e4 q f4 tie) (5q f4 - === 3q g4 = a4 tie) (q a4 tie e a4 -q q b4 tie) (q b4 -q e c5 e d5 tie) (e d5 -q e5 q f5 q g5)) :section '(0 3)) => ((s c4 -e. -q s d4 - e4 -e. s f4 tie -e.) (-5q - 5h. f4 3q g4 g4 a4 tie) (q. a4 -q b4 tie) (s b4 -e. -q s c5 - d5 tie -) (-e - - q e5 f5 g5)) Best wishes, Janusz
  16. 1 point
    Dear all, I updated my library tot (https://github.com/tanders/tot) in various ways. In particular, there are many new functions available. You can now read the documentation online at https://tanders.github.io/tot/. However, remember that you can directly evaluate the many examples in the documentation when (after installing the library) you drag the library folder into your Opusmodus project navigator and open the documentation within Opusmodus. If you are interested in the details of how the library developed, you can see a changelog at https://github.com/tanders/tot/commits/master . NOTE: When you install/upgrade this library, make sure you also install/upgrade all its dependencies, as described in the detailed installation instructions at https://github.com/tanders/tot. Best, Torsten PS: This is not an official release. As I am primarily developing this library for my own purposes, I keep it rather informal and extend it on a continuous basis for my own composition projects. Anyway, I thought at least some of you might be interested to learn that there have been many developments 🙂
  17. 1 point
    You find them all in the snippet document.
  18. 1 point
    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.
  19. 1 point
    opmo

    Extending a library?

    I am adding all the suggestions to our todo list.
  20. 1 point
    EXAMPLE 3 -> inserts "by hand" ;;; ----------------------------------------------------------------------------- ;;; EXAMPLE 3 PLACING BY HAND AT BAR/BEAT ;;; ----------------------------------------------------------------------------- (init-seed 5) ;(init-seed (random 5)) ;;; GENERATING A "NONSENSE STRUCTURAL NET" (setf basic-mat (omn-to-time-signature (make-omn :pitch (integer-to-pitch (rnd-row)) :length (flatten (gen-mix (gen-length (gen-repeat 12 1) 1/16) (gen-length (mapcar '1+ (rnd-row)) -1/8))) :velocity '(ppp)) '(4 4))) ;;; ----------------------------------------------------------------------------- ;;; YOU WANT TO PUT AN INSERT at BAR 3 on the 2/16 beat (setf mat0 (inserting-on-bar/beat* (length-rest-merge basic-mat) :insert (rnd-sample-seq 5 (make-omn :pitch (integer-to-pitch (rnd-row)) :length (rnd-repeat 12 '(1/32)) :velocity '(fff))) :time-sign '(4 4) :bar 3 :beat '(2 16))) ;;; ----------------------------------------------------------------------------- ;;; YOU WANT TO PUT AN INSERT at BAR 2 on the 3/20 beat (setf mat0 (inserting-on-bar/beat* (length-rest-merge mat0) :insert (rnd-sample-seq 5 (make-omn :pitch (integer-to-pitch (rnd-row)) :length (rnd-repeat 12 '(1/20)) :velocity '(fff))) :time-sign '(4 4) :bar 2 :beat '(3 20))) ;;; ----------------------------------------------------------------------------- ;;; YOU WANT TO PUT AN INSERT at BAR 6 on the 5/24 beat (setf mat0 (inserting-on-bar/beat* (length-rest-merge mat0) :insert (rnd-sample-seq 5 (make-omn :pitch (integer-to-pitch (rnd-row)) :length (rnd-repeat 12 '(1/24)) :velocity '(fff))) :time-sign '(4 4) :bar 6 :beat '(5 24))) (setf mat0 (length-rest-merge mat0)) ;;; ----------------------------------------------------------------------------- ;;; SCORE ;;; ----------------------------------------------------------------------------- (def-score solo-trumpet (:title "solo trumpet" :key-signature 'atonal :time-signature '(4 4) :tempo 134 :layout (bracket-group (treble-layout 'original) (treble-layout 'overwrite1))) (original :omn basic-mat; ORIGINAL :channel 1 :sound 'gm :program 'acoustic-grand-piano) (overwrite1; ORIGINAL WITH INSERTS/OVERWRITES :omn mat0 :channel 1 :sound 'gm :program 'acoustic-grand-piano)) added 1 minute later it's not perfect, some bugs from time to time (if you do something "special")... try to fix it... greetings andré
  21. 1 point
    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.
  22. 1 point
    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.
  23. 1 point
    opmo

    Microtonal notations

    Dear Torsten, We have spent some time talking about the microtonal notation and came up with this solution which we think fits the notation and OMN well.
  24. 1 point
    Hi, Picat is a Prolog-derived language with good support for Constraint Programming. In today's blog, I have shown how to implement a simple CP-based function in Picat for chord/non-chord tone generation, and more interestingly, how we can interact with Picat from Opusmodus to get the results of the computation. To me, this opens up new possibilities for expanding what you can do from Opusmodus! Regards, Rangarajan
  25. 1 point
    You may use: (integer-to-pitch major) SB.
×