Jump to content

o_e

Members
  • Posts

    273
  • Joined

  • Last visited

Posts posted by o_e

  1. Hi,

     

    (setf test-flatten (flatten 
                       '((q a4 -e gs4 e4 -)
                        (q a4 e - e4 d4) 
                        (-e g4 e4 - q a4) 
                        (-h.) 
                        (-q e a4 gs4 - g4))))
    
    (setf por (length-rest-position test-flatten)) 
    ==>(1 4 7 10 13 15 16 19)
    
      (setf sr (position-filter por test-flatten))
    ==>(-e - - -)
    ;should be this:
    ;  (-e - - - - -h. -q -e)
    ;or do I miss something?

    Thanks for assistance!

  2. Hi,

     

    (setf test '((q a4 mf e a4 p e gs4 f  e4 mp g4 p) 
                   (q a4 e e gs4 e4 d4)))
    (setf one '(1 3))
    (dictum '(:remove :event :bar 1 :event one) test)

    This gives an error, is there a way to use variables for keywords?

     

    Thanks and Happy Easter everybody 🙂

     

    Edit: Just checked another function (randomly choosen). Here a variable for a keyword works fine.

    My guess is that it has to do with the quotation mark inside the dictum, is there a way around this?

     

    (setf test-2  '((q a4 mf e a4 p e gs4 f  e4 mp g4 p) 
                   (q a4 e e gs4 e4 d4) 
                   (e e4 g4 e4 g4 q a4)))
    (setf sec '(0 2))
    (pitch-transpose '(7 -5 ) test-2 :section sec)
    ==>((q e5 e p eb5 f b4 mp d5 p) (q a4 p e e gs4 e4 d4) (e b3 p d4 b3 d4 q e4))

     

  3. @André: isnt it so, that the length value is valid until the next length value regardless if its a rest or not?

    Please correct me if I'am wrong..

    (omn :length '((-e a3f4d5 q f4d5a5) (q a3e4c5 q e4c5a5) (-e a3g4e5 h g4e5a5))) 
    ==>((-1/8 1/8 1/4) (1/4 1/4) (-1/8 1/8 1/2))

     

  4. Hi,

     

    When I run the following code I get a terrible latency between the voices. Do I miss something or is it a bug?

     

    Thanks!

     

    (setf pattern (gen-repeat 50 '(s e4 fs4 b4 cs5 d5 fs4 e4 cs5 b4 fs4 d5 cs5)))
    (setf tempo (mclist (gen-integer 10 70) (gen-repeat 100 1)))
    
    (def-score score1
               (
                :key-signature 'chromatic
                :time-signature '(1 4)                             
                :tempo tempo
                )
      
      (inst1 :omn pattern
             :sound 'gm
             :channel 1
             :program 0
             :pan 127))
    
    (def-score score2
               (
                :key-signature 'chromatic
                :time-signature '(1 4)                             
                :tempo tempo
                )
      
      (inst1 :omn pattern
             :sound 'gm
             :channel 2
             :program 12
             :pan 1))
    
    
    
    (progn
      (score-player 'score1)
      (score-player 'score2))

     

  5. Thank you!

    As the time-signature is 1/4 now, there is a change in the tempo definition necessary:

    (setf tempo (mclist (gen-integer 160 10) (gen-repeat 150 1)))

    then the two instrument's start and end together as it should be..

    Can't wait for the score-player doc, any chance the midi export function can work correctly? It is cumbersome to record the midi-stream..

    Anyway thanks a lot for this!!

     

    best

     

    ole

     

    PS I do not understand why this:

    (mapcar 'list (gen-integer 110 60)(gen-repeat 50 '1))
    ==>((110 1) (109 1) (108 1) (107 1) (106 1) (105 1) (104 1) (103 1) (102 1) (101 1) (100 1) (99 1) (98 1) (97 1) (96 1) (95 1) (94 1) (93 1) (92 1) (91 1) (90 1) (89 1) (88 1) (87 1) (86 1) (85 1) (84 1) (83 1) (82 1) (81 1) (80 1) (79 1) (78 1) (77 1) (76 1) (75 1) (74 1) (73 1) (72 1) (71 1) (70 1) (69 1) (68 1) (67 1) (66 1) (65 1) (64 1) (63 1) (62 1) (61 1))
    
    (mapcar 'list (gen-integer 60 110)(gen-repeat 50 '1)) 
    ==>((60 1) (61 1) (62 1) (63 1) (64 1) (65 1) (66 1) (67 1) (68 1) (69 1) (70 1) (71 1) (72 1) (73 1) (74 1) (75 1) (76 1) (77 1) (78 1) (79 1) (80 1) (81 1) (82 1) (83 1) (84 1) (85 1) (86 1) (87 1) (88 1) (89 1) (90 1) (91 1) (92 1) (93 1) (94 1) (95 1) (96 1) (97 1) (98 1) (99 1) (100 1) (101 1) (102 1) (103 1) (104 1) (105 1) (106 1) (107 1) (108 1) (109 1))

    gives a different result than this:

    (gen-integer 110 60)
    ==>(110 109 108 107 106 105 104 103 102 101 100 99 98 97 96 95 94 93 92 91 90 89 88 87 86 85 84 83 82 81 80 79 78 77 76 75 74 73 72 71 70 69 68 67 66 65 64 63 62 61 60)
    
    (gen-integer 60 110)
    ==>(60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110)

     

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

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

     

    15 hours ago, AM said:

     

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    
    ;; damit kannst du einfach dann OMN's eingeben, pro tempo-stream 4 instrumente und dann abspielen,
    ;; streams überlagernd abspielen
    
    (defun play-tempo-stream (&key (inst1 nil) 
                                   (inst2 nil)  
                                   (inst3 nil) 
                                   (inst4 nil)
                                   (port 0)
                                   (tempo-curve 60))
    
      (def-score stream
                 (:key-signature 'chromatic
                                 :time-signature (get-time-signature (omn-to-time-signature inst1 '(1 4)))
                                 :tempo tempo-curve
                                 :layout (list
                                          (bracket-group
                                           (treble-layout 'inst1)
                                           (treble-layout 'inst2)
                                           (treble-layout 'inst3)
                                           (treble-layout 'inst4))))
        
        (inst1 :omn inst1 
               :port port
               :channel 1 
               :pan 20)
        
        (inst2 :omn inst2 
               :port port
               :channel 2 
               :pan 20)
        
        (inst3 :omn inst3 
               :port port
               :channel 3 
               :pan 20)
        
        (inst4 :omn inst4 
               :port port
               :channel 4 
               :pan 20))
    
      (score-player 'stream))
    
    
    
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    
    ;; some "random omn" to play
    
    (setf p1 '(q d4 pp s eb4 < leg g4 < leg bb4 < leg a4 q. cs5 mf -e
                 3q gs5 > leg fs5 > leg c5 > b4 > leg f4 leg e4))
      
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    
    
    
    ;; 3 streams mit je 3 instrumenten
    ;; konstantes tempo
    
    (progn 
      (play-tempo-stream :inst1 p1
                         :inst2 p1
                         :inst3 (gen-retrograde p1)
                         :tempo-curve 30
                         :port 0)
    
      (play-tempo-stream :inst1 (pitch-transpose 11 p1)
                         :inst2 (pitch-transpose 12 p1)
                         :inst3 (pitch-transpose 13 (gen-retrograde p1))
                         :tempo-curve 50
                         :port 0)
    
      (play-tempo-stream :inst1 (pitch-transpose -11 p1)
                         :inst2 (pitch-transpose -12 p1)
                         :inst3 (pitch-transpose -13 (gen-retrograde p1))
                         :tempo-curve 70
                         :port 0))
    
    ;;; tempoverlauf per BEAT
    
    (progn 
      (play-tempo-stream :inst1 p1
                         :inst2 p1
                         :inst3 (gen-retrograde p1)
                         :tempo-curve '((100 1) (160 1) (172 1)) ;; tempo per beat
                         :port 0)
    
      (play-tempo-stream :inst1 (pitch-transpose 11 p1)
                         :inst2 (pitch-transpose 12 p1)
                         :inst3 (pitch-transpose 13 (gen-retrograde p1))
                         :tempo-curve '((122 1) (177 1) (201 1)) ;; tempo per beat
                         :port 0)
    
      (play-tempo-stream :inst1 (pitch-transpose -11 p1)
                         :inst2 (pitch-transpose -12 p1)
                         :inst3 (pitch-transpose -13 (gen-retrograde p1))
                         :tempo-curve '((63 1) (62 1) (67 1))  ;; tempo per beat
                         :port 0))
    
    
    
    

     

     

     

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

     

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

×
×
  • Create New...

Important Information

Terms of Use Privacy Policy