Skip to content
View in the app

A better way to browse. Learn more.

Opusmodus

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

AM

Members
  • Joined

  • Last visited

Posts posted by AM

  1. 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é

     

     

  2. 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é

  3. 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))

  4. 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

  5. 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é

     

  6. 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))

     

  7. 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

  8. 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

     

  9. 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é
     
     
  10. POLYTEMPO: would be great and very interesting! here is the technology to do/perform this LIVE on STAGE... http://www.smc-conference.net/smc-icmc-2014/images/proceedings/PS2-B03-PolytempoNetwork.pdf. (by philippe kocher - institute for computer music and sound technology zurich university of art). 

    it works simple and fantastic!!

     

    MICROTONAL: i prefer  (q c4.0456) but i would like more (or as an option) 60.0456 (via midi-note-number), so you could work/calculate directly with numbers and "pure lisp-code"....

     

     

  11. it works in PWGL, not really for notation but i can listen/programm/simulate polytempo-scores in midi (or other players).  so i could transfer my lisp-code to pwgl-boxes... etc...

    but i would be nice, if i could do it in OPUSMODUS, no boxes etc...  :-)

     

    best wishes

    andré

     


Copyright © 2014-2026 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

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.