Jump to content
  1. lviklund

    lviklund

  • Similar Topics

    • By torstenanders
      I am still working on getting playback for GrandOrgue working properly. I defined a sound set with various articulations (shown in a related post, see link below) for setting, e.g., which manual to use for the current hand, and which stop combinations on that manual. Those articulations already work individually in Opusmodus.
       
      The problem I am facing is that I need to constantly combine multiple of such articulations in a single note. For example, I may need to specify that the right hand stops playing on the manual I (one articulation), that it instead plays on manual II and III coupled (two further articulations) and which stop combinations to use for those manuals (two more articulations). So, in this example we have five articulations on a single note, and each needs to send a specific MIDI event. Such an occurrence is something completely normal in organ literature. In OMN, this could be written, e.g., as follows using my sound set shown in the post linked below. 
       
      '((q c4 -I+II5+III6+II+III))  
      Now, my only problem is that whenever there are two articulations combined for a single note, where each should output its own MIDI event, Opusmodus always only outputs just one of these MIDI events. I confirmed this by checking the resulting MIDI events both in an exported MIDI file and with a realtime MIDI monitor (https://www.snoize.com/MIDIMonitor/). Note that my setup works with other software (notation software and DAWs), as they allow for having multiple articulations allocated to a single note outputting separate MIDI events. 
       
      Is this perhaps somehow possible with Opusmodus as well?
       
      Best,
      Torsten
       
      PS: I realise that Opusmodus does send multiple MIDI events if multiple MIDI events are explicitly specified for a single articulation, as in the "VSL Cello Solo" file. However, I cannot really explicitly define all the possible articulation combinations as individual articulations instead, as what would result in an impractical large number of them. There are currently individual 48 articulations (for an organ with three manuals and 10 preset combinations each), and these articulations can be combined in various ways in pairs, triplets, quadruples etc., which would result in an impractically huge number of articulations to define. 
       
      PPS: One potential workaround for some situations would be to instead allocate some of these articulations to rests immediately preceding the notes for which they are needed, but that is not possible either, because custom articulations cannot be added to rests. Instead, additional notes are added. 
       
      PPPS: For completeness: a related post.
       
       
    • By AM
      dear janusz
       
      is there an OPMO-solution to put the FLOAT for tuning in every event (with pitch) . some times ago i coded such an "add-data-to-event"-function for my own, but a OPMO-one would be more professional 🙂
       
      greetings
      andré
    • By AM
      extendig SINGLE-EVENTS with optional-datas (like instrument-name, or whatelse)
      and reading/filtering this EVENT-LIST by a key-value -> useful for instrumentation...
      greetings
      andré
       
      ;;; --------------------------------------------------------------------------------------------- ;;; extending single-events with optional-datas ;;; --------------------------------------------------------------------------------------------- ;; SUBFUNCTION (defun memberp (n liste) (not (equal 'nil (member n liste)))) ;; MAINFUNCTION (defun create-extended-single-events (omn-list &key (optional-data1 nil) (optional-data2 nil) (optional-data3 nil)) (loop for i in (single-events omn-list) for data-cnt = 0 then (incf data-cnt) when (< (car (omn :length i)) 0) collect (append (list (first i)) (gen-repeat 6 'nil)) else collect (append (loop repeat 4 for cnt = 0 then (incf cnt) collect (nth cnt i)) (append (list (nth data-cnt optional-data1) (nth data-cnt optional-data2) (nth data-cnt optional-data3)))))) (create-extended-single-events '(e c4 mp stacc e. -h e. p ord e e4 stacc) :optional-data1 '(trp fl trp trp fl clar) :optional-data2 '(1 3 2 4 3 5 3 1 1)) ;; events are extended with the optional-data1-x => ((e c4 mp stacc trp 1 nil) (e. c4 mp nil fl 3 nil) (-h nil nil nil nil nil nil) (e. c4 p ord trp 4 nil) (e e4 p stacc fl 3 nil)) ;;; --------------------------------------------------------------------------------------------- ;;; reads events by key-values!! ;;; --------------------------------------------------------------------------------------------- ;;; now, with this function, you can filter all EVENTS with key-value X. all others will be replaced ;;; by RESTS, so the time-length-structure will be not destroyed. you can say: i need all EVENTS ;;; with key-value 'trp in the trumpet-voice, or all EVENTS with key-value 'c4 for .... (defun read-single-events-by (event-stream &key (key-value 'c4)) (loop for i in event-stream when (memberp key-value i) collect i else collect (append (list (length-invert (first i))) (gen-repeat 6 'nil)))) (read-single-events-by '((e c4 mp stacc trp 1 nil) (e. c4 p ord fl 3 nil) (e e4 p stacc trp 2 nil)) :key-value 'trp) ;; shows all EVENTS with key-value 'trp (other events are replaced by rests) => ((e c4 mp stacc trp 1 nil) (-3/16 nil nil nil nil nil nil) (e e4 p stacc trp 2 nil)) (read-single-events-by '((e c4 mp stacc trp 1 nil) (e. c4 p ord fl 3 nil) (e e4 p stacc trp 2 nil)) :key-value '3) ;; shows all EVENTS with key-value '3 (other events are replaced by rests) => ((-1/8 nil nil nil nil nil nil) (e. c4 p ord fl 3 nil) (-1/8 nil nil nil nil nil nil)) (read-single-events-by '((e c4 mp stacc trp 1 nil) (e. c4 p ord fl 3 nil) (e e4 p stacc trp 2 nil)) :key-value 'ord) ;; shows all EVENTS with key-value 'ord (other events are replaced by rests) => ((-1/8 nil nil nil nil nil nil) (e. c4 p ord fl 3 nil) (-1/8 nil nil nil nil nil nil))  
×
×
  • Create New...