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.

o_e

Members
  • Joined

  • Last visited

Posts posted by o_e

  1. I made a simple example to show how it works.

    You have to set the port and the midi channels to your needs.

    What I don't get is why the two voices of different length, any explanation is welcome..

    The OM MIDI-Export function does not work here, so you have to record the MIDI-Stream in your DAW.

    Enjoy!

     

    (setf pattern (gen-repeat 50 '(s e4 fs4 b4 cs5 d5 fs4 e4 cs5 b4 fs4 d5 cs5)))
    
    (defun play-tempo-stream (&key (inst1 nil) 
                                   (inst2 nil)  
                                   (port "OM-VE1")
                                   (tempo-curve 60))
    
      (def-score stream
                 (:key-signature 'chromatic
                                 :time-signature  '(3 4)                             
                                 :tempo tempo-curve
                                 :layout (list
                                          (bracket-group
                                           (treble-layout 'inst1)
                                           (treble-layout 'inst2))))
        
        (inst1 :omn inst1 
               :port port
               :channel 1 
               :pan 20)
        
        (inst2 :omn inst2 
               :port port
               :channel 7 
               :pan 20))
     
      (score-player 'stream))
    
    (progn 
      (play-tempo-stream :inst1 pattern
                         :tempo-curve (mapcar 'list (gen-integer 110 60)(gen-repeat 50 '1))
                         :port 0)
    
      (play-tempo-stream :inst2 pattern
                         :tempo-curve (mapcar 'list (gen-integer 61 111)(gen-repeat 50 '1))                             
                         :port 0))

     

    flextempo.mid

  2. Hi,

    I was fiddeling around with your code below, but I don't get it, can you please explain a little more how it works, when I test it the tempo of instrument1 to 4 are still in the same tempo (inside one play-tempo-stream (), when I try the play-tempo-streams at the same time, it throws me an error. Can you please provide a simple Conlon-Nancarro-ish 2 voice example or something to work along?

    Thanks in advance!

    best ole

     

    Edit: I get it to work with a fresh morning head, thanks for sharing the code!

  3. Something similar, only valid for the given octave, but taking the length into account and can handle pitch repetitions and list of lists, no negative/inversed function though:

     

    (defun mute-pitch-event (pch omnlist)
     
    (let* ((pos (position-item pch (omn :pitch (flatten omnlist))))
           (poslen (position-filter pos (omn :length (flatten omnlist))))
           (new (position-replace pos (mapcar #'(lambda (x)(* -1 x)) poslen) 
                                 (omn :length (flatten omnlist)))))
                 (if (some #'listp omnlist)
                 (gen-divide (mapcar 'length (omn :pitch omnlist))
                 (make-omn :length new
                :pitch (omn :pitch (flatten omnlist))
                :swallow t))
                   (make-omn :length new
                :pitch (omn :pitch omnlist)
                :swallow t))))
    
    ;;;;-testing-;;;;;
    
    (setf test '(t c4 mf cs4 d4  eb4 e eb4 e4 f4 fs4 q g4 s gs4 a4 bb4 b4))
    (mute-pitch-event 'eb4 test)

     

  4. I can't figure it out how it works, it gives strange results here (see screeshot), I need some assistance..

    Thanks!

     

    (midi-to-omn "~/Opusmodus/Media/MIDI/Bach/bach-gv-aria.mid" :instrument 1)

    gives what is seen on the screenshot

    Bildschirmfoto 2022-01-08 um 12.42.37.jpg

  5. I don't understand exactly what you want to achive?

    The following code does what you want, it just have a little graphic glitch:

    (setf voice1 '(s c3 e b2 s_s bb2 e. bb2 tie -q))
    (setf voice2 '(-q  -q bb2gb2))
    
    (merge-voices voice1 voice2)

    When the Gb is transposed an octave lower you can see it clearly:

    (setf voice1 '(s c3 e b2 s_s bb2 e. bb2 tie -q))
    (setf voice2 '(-q  -q bb2gb1))
    
    (merge-voices voice1 voice2)
    Quote

     

     

    Bildschirmfoto 2022-01-06 um 10.48.38.jpg

    Bildschirmfoto 2022-01-06 um 10.47.41.jpg

  6. I wrote a function myself, not sure if it is acceptable for Janusz 🙂

    hth

     

    (defun remove-tie (y)
      "tests if it is a single list or a list of lists,then remove ties"
    (if (car (mapcar #'listp y))
     (loop for x in y
                                 
          for z = (remove 'tie x)
           for a = (remove 'tie+tie z)
          collect a) (remove 'tie+tie (remove 'tie y))))

     

    Edit: I think this only removes ties between bars as I remember correctly..

  7. Thanks! There is one more thing I don't get, pitch-transpose seems to change the rhytm somehow or do I miss again something

    :

    (setf rhy '(e e_3q 3q 3q_e e_3q_3q 3q)) ;also tried ratios- same result
    
    (setf pit (span rhy line2))
    
    (setf pit2  (make-omn :length rhy
              :pitch  pit))
    (setf pit2a (pitch-transpose 2 pit2))

     

    Bildschirmfoto 2021-09-25 um 20.58.45.jpg

    Bildschirmfoto 2021-09-25 um 20.59.00.jpg

  8. Hi,

     

    What I want is the first pict:

    What I get, when I use this:

    (setf rhy '(e e 3q = = tie e e))

    is seen in the second pict, what am I missing?

    Bildschirmfoto 2021-09-25 um 16.19.24.jpg

    Bildschirmfoto 2021-09-25 um 16.20.17.jpg

     

     

    Ok, I found the solution, writing 3q 3q 3q instead of 3q = =

    But then I stumbeled over the next problem, how can I use span with such tied rhymths?

     

    What I want is this:

    Bildschirmfoto 2021-09-25 um 16.39.09.jpg

     

    what I get with span is this:

    (setf line '(( c4 d4 e4 f4)( g4 a4)))
    (setf rhy '(e e tie 3q 3q 3q tie e e tie 3q tie 3q 3q))
    (setf pit (span rhy line))
    
    (make-omn :length rhy
              :pitch  pit)

     

     

     

     

    Bildschirmfoto 2021-09-25 um 16.52.06.jpg

  9. Hi,

     

    When I constrain the ambitus range to be smaller than an octave, I do not understand exactly on which axis the pitches are inverted, when I use

    :type :invert

    it is clear, but what does the default transpose type?

    Thanks!

     

     

    (setf range '((q c4 cs4 d4 ds4 e4 f4 fs4 g4 gs4 a4 bb4 b4 c5)))
    
    (setf amb2 (ambitus '(c4 a4) range  ))
    
    (merge-voices range amb2)

     

    Bildschirmfoto 2021-09-24 um 16.32.36.jpg

  10. Hi,

     

    How do I point

    :methods

    and

    :global-methods

    to my own def-unfold-set instead of the default one?

     

    (counterpoint patterns '(((- 2 3 -))
                             ((4 * * 6)) 
                             ((1 - - 2)) 
                             ((5 6 1 2)))
                  :index 'voice
                  :global-polyphony '((1 p) (2 o) (10 o) (11 o))
                  :iterate t
                  :global-methods '((fl) (cl) (hn) (vc)))

     

    Thanks!

  11. I've tried to get an overview of which pitches are used how many times in a stem:


     

    (plot-pcs-distr  '((q c3 c3 d4 f5)(e fs2 fs2 fs2 fs2 fs2 gs4)))

    ==>((0 2) (1 0) (2 1) (3 0) (4 0) (5 1) (6 5) (7 0) (8 1) (9 0) (10 0) (11 0))

    so I can see at a glance there are 2 c's, zero cis's, one d and so forth..

     

    and the plot:

    Bildschirmfoto 2021-09-12 um 17.21.11.jpg

  12. Here is what I've hacked together, thanks for looking into it:

    (defun plot-pcs-distr (x)
    
    (progn
    (setf c (list (count '0 (flatten (get-pcs x)))))
    (setf cs (list (count '1 (flatten (get-pcs x)))))
    (setf d (list (count '2 (flatten (get-pcs x)))))
    (setf ds (list (count '3 (flatten (get-pcs x)))))
    (setf e (list (count '4 (flatten (get-pcs x)))))
    (setf f (list (count '5 (flatten (get-pcs x)))))
    (setf fs (list (count '6 (flatten (get-pcs x)))))
    (setf g (list (count '7 (flatten (get-pcs x)))))
    (setf gs (list (count '8 (flatten (get-pcs x)))))
    (setf a (list (count '9 (flatten (get-pcs x)))))
    (setf bb (list (count '10 (flatten (get-pcs x)))))
    (setf b (list (count '11 (flatten (get-pcs x)))))
    
    (setf all (append c cs d ds e f fs g gs a bb b))
    
    (setf liste (loop for x in all
          for y in '(c cis d dis e f fis g gis a bes b)
      collect (list x y)))
    
    (sort liste #'< :key #'first)
    
    
     
    (setf liste-plot (loop for i in all
          for j in '(0 1 2 3 4 5 6 7 8 9 10 11)
      collect (list j i)))
    
    (xy-plot liste-plot
             :join-points t
             :point-radius 2
             :style :fill
             :point-style :square)
    ))

     


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

Important Information

Terms of Use Privacy Policy

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.