Jump to content

AM

Members
  • Joined

  • Last visited

Posts posted by AM

  1. Posted

    i would like to define my own articulations (because in CONTIMBRE  http://www.contimbre.com  you have lot of possibilities with programm-changes... and for mapping i have to define it properly)

     

    :::::::::::::::

     

    (setq articulations '(arco -  -  pizz - -));; -> that works fine because ord-omn

    (setq articulations '(arco -  -  pizz - - legno-battuto - whatever - - - -  );; -> i would like to write such user-defined expressions

    -> is there a possibilty?

     

    :::::::::::::::

     

    (setq vn (make-omn :length lengths
                       :pitch pitches
                       :articulation articulations)) ;; but here is the omn-error with my own expressions, is there any solution?

     

    :::::::::::::::

     

    if it would work i could map like this:

    (def-sound-set gm-violin
       :programs
      (:group violin 
              arco 40
              legno-battuto 50
              pizz 60
              whatever 70))

     

    (def-score example
               (:key-signature 'chromatic
                               :time-signature '(4 4)
                               :tempo '(q 70)
                               :layout (violin-layout 'violin))

      (violin :omn vn
              :channel 1
              :sound 'gm-violin))

     

    :::::::::::::::

     

  2. in lisp -> create OMN with (midi-to-pitch)... 

     

    (setq half-row (loop repeat 13
                     with interval
                     with stack = 60
                     with cnt = 0
                     when (oddp cnt) do (setq interval 13)  
                     when (evenp cnt) do (setq interval -11) 
                     when (= cnt 0) collect stack
                     else collect (setq stack (+ stack interval))
                     do (incf cnt)))

     

    (midi-to-pitch (append half-row (reverse (butlast half-row))))

  3. ...technically, such pattern-match-things are - for my opinion - interesting when you write one value after the other (step by step with all paramters parallel), and then check all the time (every gen-cycle) the output on PATTERNS, and when there is a match you can change the gen-rules... 

     

    data-structure with EVENTS like that...

     

    (defstruct event duration pitch velocity rhy reading_rate optional_data)
    (setf bot-1 (make-event))

    ...

     

    and in every cycle you could write/GENERATE an EVENT

     

    (Excerpt)

    do (setf bot-1 (make-event 
                    :duration data
                     :pitch (setq pitch-1 (nth seq-cnt-1 pitchfield))
                     :velocity (rnd-walk-in-chord '(1 0 -1) velocityfield velocity)
                     :rhy (rnd-walk-in-chord '(1 -1) rhyfield rhy-1)
                     :reading_rate 1; (rnd-pick'(1 2 3))
                     :optional_data (rnd-pick '(a b c d e))))

     

    and then you check it (every cycle) for patterns... and if MATCH you could change the GEN-part the GEN-rules

    ...

     

    like a small robot who tries "to move in the world or to recognize the world"...

  4. dear rangarajan

     

    i think the motif-map-function has a PATTERN-MATCH inside, but it "replaces the MATCH", (like in a contextual-rewrite), but perhaps i don't use the name/expression "pattern-match" in a wright/correct way... i'm more composer/musician then programmer :-)


    here's a very basic example for am SIMPLE/PURE PATTERN MATCH:
    a rnd-gen-value-list (to show how you could use it), with a PATTERN-MATCH-prog who scans it. 
    the next value - after a complete match - will be changed into a rest... but you also could start a sub-function then who do what ever you want...? (when you change the code)

     

    in a concrete project i coded it also in a more complex way - kind of "nontrivial-machines" (as an experiment) -> PATTERNmatch in pitches changes the DURATIONS, PATTERNmatch in durations changes pitches or timbre... and so on... like a "dynamic-interaction-network"...

     

    sorry for my bad english...

    regards
    andré

     

    FUNCTION - FOR A SIMPLE EXAMPLE

    (defun pattern_cogn (liste pattern) 
      (loop for z in liste
        with cnt = 0
        with pattern_cnt = 0
      
        collect z   
        
        ;;;check a value - if it's a match -> incf counter
        when (or (eq  (nth cnt pattern) z)  (eq '? (nth cnt pattern)))
        do (incf pattern_cnt)
        and do (incf cnt)
        else do (setq cnt (setq pattern_cnt 0))
        
        ;;; if the pattern is MATCHED (=> counter = length pattern)  -> the output changes ... for example, the next value will be a rest
        ;;; = consequence
        when (eq pattern_cnt (length pattern))
        collect (* z -1)
        and do (setq cnt (setq pattern_cnt 0))))

     

    FUNCTION-EVAL

    (pattern_cogn (loop repeat 100
                    collect (1+ (random 5))) ; generates rnd-values ->  TO SEARCH IN IT
                  '(4 ? 2)) ; pattern to search (here with wildcard)

     

    WHEN PATTERN MATCH THEN NEXT VALUE (* -1)

  5. short question (i didn't read the whole documentation)... when i use/work with pattern-matching, i've done it with WILDCARDS ... is there any aspect of that in the motif-map function? or is a "ordinary pattern-matching-function" in OM?

     

    like that: pattern to search/replace 

    '(0 1 ? 3)

     

    this is musically interesting, because it works with "fuzziness"....

     

    regards,

    andré

     

     

  6. okay, i understand... i'm "not working" with '(q e q...), i'm always working with NUMBERS (with pitches too). it's easier to write/handle the values, easier to do my own specific code (and multipy, add... whatever) - only on "def-score" i'm changing the representation by generating OMN...

     

    regards,

    andré

  7. Posted

    hi all

     

    i would like to MERGE/FIT the following 3-layer-voices(-EXAMPLE) into a ONE-layer-voice (with complex rhythms) - is it possible in OPUSMODUS?

    thanx for help!

    andré

     

    EXAMPLE:

    (setf voices (merge-voices (make-omn :length (gen-length '(1 2 3 4 5 6 7 8) 1/20)
                                         :pitch '(c4)
                                         :velocity '(pppp ppp pp p))
                               
                               (make-omn :length (gen-length '(1 2 3 4 5 6 7 8) 1/8)
                                         :pitch '(c5)
                                         :velocity '(pppp ppp pp p))
                               
                               (make-omn :length (gen-length '(1 2 3 4 5 6 7 8) 1/12)
                                         :pitch '(c6)
                                         :velocity '(pppp ppp pp p))))


    (def-score example
               (:key-signature 'atonal
                               :time-signature '(4 4)
                               :tempo '(96)
                               :layout (treble-layout '3-layers))
     (3-layers
      :omn voices
      :channel 1
      :sound 'gm
      :program 1))

  8. Posted

    interesting bug: have a look at the 1/20-layer (c6) -> midi sounds correct (!), notation is wrong

     

    ;;;;;;;;;;;;;;;;;;;;


    (setf duration1 '(8 5 3 2 3 5 8))
    (setf duration2 '(8 5 3 2 3 5 8)) 
    (setf duration3 '(8 5 3 2 3 5 8))

    (setf voices (merge-voices (make-omn :length (gen-length duration1 1/20)
                                         :pitch '(c6))
                               (make-omn :length (gen-length duration2 1/32)
                                         :pitch '(b4))
                               (make-omn :length(gen-length duration3 1/8)
                                         :pitch '(as2))))


    (def-score voices
               (:key-signature '(c maj)
                               :time-signature '(4 4)
                               :tempo '(60))
      
      (piano
       :omn voices
       :channel 1
       :sound 'gm
       :program 0))

    (display-midi (compile-score 'voices) :display :quick-view)

     

    ;;;;;;;;;;;;;;;;;;;;

     

    56ddeae86b1c7_OhneTitel.thumb.jpg.22c4cd

  9. thanx, but midi don't like such VALUES  :-( - so it works only for notation (or sibelius/finale)...

     

    for the future it would be nice for my work (and perhaps interesting for other composers), when the time/rhythm-things could be more flexible - i think the biggest bounderies in opusmodus are the time/rhythm-things and it's notation (paper/pencil is the most flexible way, and i don't want to be a limited by software). if you work really "experimental" you want to map rhythm-values in a complexer way...

     

    for me it would be great and very nice, when it would be possible to notate/play such rhy-sequences like '(1/4 1/4 1/12 1/12 3/16 1/16....) with values that are not completing 1/4. at the moment OPUSMODUS is "correcting" this... (would be nice to have irregular time-signatures or bars with no time-signature!!!)....  

     

    in my work for example: i have programmed BOTS/non-trivial-machines, who are generating values "step-by-step" and the inner-state of the non-trivial-machine always changes its datas/memory (in a rnd-way). the result is, that the rhythm-values all the times are changing (more or less like in the special-bars-examples). and because it's not possible to calculate the output of the non-trivial-machine (that's the natural constitution of them), it's not possible to "fit the rhyhm-values" into prefiexed-bar-structures. that's a problem for my work and so i have to write such strange programs who fix the complicated rhy-changes :-)

     

    thanx for your great work!!!

    andré

     

  10. a solution: perhaps it's interesting for anyone (or as an example for OPMUSMODUS-implementation) - a simple function (programmed by a friend and myself)  - not very smart but it (should) work(s) :-)

    greetings

    a.

    (defun time-sign-changes (durations rhys &key (complex-bars 'nil))
      (if (equal complex-bars 'nil)
          (loop 
            for i in durations
            for j in rhys
            with sum = 0
            with last-j = (first durations)
            when (and (/= j last-j) (/= sum 0))
            collect (list (numerator sum) (denominator sum) 1) into bag and do (setq sum 0)
            do (setq sum (+ sum (abs (* i j))))
            when (> sum 1/4)
            collect '(1 4 1) into bag and do (setq sum (- sum 1/4))
            do (setq last-j j)
            finally (return (append bag (list (list (numerator sum) (denominator sum) 1)))))
        (loop 
          for i in durations
          for j in rhys
          with sum = 0
          with last-j = (first durations)
          when (and (/= j last-j) (/= sum 0))
          collect (list (numerator sum) (denominator sum) 1) into bag and do (setq sum 0)
          do (setq sum (+ sum (abs (* i j))))
          when (> sum 1/2)
          collect '(1 2 1) into bag and do (setq sum (- sum 1/2))
          do (setq last-j j)
          finally (return (append bag (list (list (numerator sum) (denominator sum) 1)))))))

     

    (setq durations '(-1 2 3 4 3 2 -5 4 3 2 4 3 1 7)) 
    (setq rhythms '(1/32 1/32 1/32 1/32 1/20 1/20 1/20 1/20 1/20 1/12 1/12 1/12))
    
    ;;creating the lengths
    (setq lengths (loop 
                    for i in durations
                    for j in rhythms
                    collect (* i j)))
    
    ;; creating the bar-changes -> :complex-bars 'nil or 't
    (setq bars (time-sign-changes durations
                                  rhythms
                                   :complex-bars 'nil))

     

    (def-score solo 
               (:title "example" 
                       :key-signature 'atonal
                       :time-signature bars
                       :tempo '90 
                       :layout (treble-layout 'example)) 
      (example 
       :omn  (make-omn
             :pitch '(c4)      
             :length lengths)
       :channel 1  
       :volume 100 
       :sound 'gm))

     

  11. seems to be a bug...

    evaluate this: 

    (make-omn
             :pitch '(c5 c3 c2 c3 c4)
             :length '(-2/12 2/12 -1/12 6/12 -1/12 3/12 1/12)                           
             :velocity '(mf))

     

    after the 6/12 the next value -1/12 is shown as -1/8 in the score

    score 
    exa.thumb.jpg.d3953e489ff5da45f0eb5f85da

  12. Posted

    when i evaluate this:

    (make-omn
             :pitch '(c5)
             :length '(3/12 -1/12 4/12 -1/20 3/20 1/20)                           
             :velocity '(mf))

     

    the result is wrong (look at (3/12 -1/12 4/12).... but i would like to notate something like valeur ajoutée

    isn't it possible? thanx a.

     

    example.thumb.jpg.70547778e4c126771e3f34

     

  13. Posted

    little lisp-problem/question with &optionel / &key... 

    here are two test-programs to explore keyword and optional paramters

     

     

    this test-program works

     

    (defun test1 (liste  add  &key (add-on/off))
      (loop for i in liste 
        when (equal add-on/off 'on)
        collect (+ i add)
        else collect i))
     
    (test1 '(1 2 3 4 5) 100 :add-on/off 'on)
     
     
    this version with &optional don't work... why? 
     
    (defun test2 (liste  add &optional (x 10) &key (add-on/off))
      (loop for i in liste 
        when (equal add-on/off 'on)
        collect (+ i add x)
        else collect i))
     
    (test2 '(1 2 3 4 5) 100 :add-on/off 'on)
     
    > Error: While compiling test2 :
    >        Bad lambda list : (liste add &key add-on/off &optional (x 10)), in process Listener-1(7).
     
     
     
    thanx for help
    andré
     
     

Copyright © 2014-2025 Opusmodus™ Ltd. All rights reserved.
Product features, specifications, system requirements and availability are subject to change without notice.
Opusmodus, the Opusmodus logo, and other Opusmodus trademarks are either registered trademarks or trademarks of Opusmodus Ltd.
All other trademarks contained herein are the property of their respective owners.

Powered by Invision Community

Important Information

Terms of Use Privacy Policy