Feature request - Explicit bowing control

Hello!

I'm a long term customer of all things Samplemodeling. I'm currently enjoying the 2.01 Strings update - thanks for that! I understand how to use the product and am writing this message to make a suggestion/request.

Currently it is documented, in many places, that legato/portamento is triggered via an "overlap". This is a common technique, and has been a feature to support live performance for as long as there have been electronic keyboards for synthesizers.

However, what is currently implemented is not legato triggered by overlap, an overlap being when the second Note On occurs before the prior Note Off, but instead is triggered by any gap shorter than a particular duration, by my observations in the realm of 8-10 milliseconds.

I understand why you might offer this mode (e.g. wind controllers can't overlap notes the way keyboards can). Nevertheless, this creates a number of problems:

a) It makes it difficult to just "pencil in" (either in a DAW or notation program) consecutive notes and have them each be bowed, which should be the default for non-slurred notes, because such pencilling in will create full-length notes that abut (no gap, but _do not_ overlap). Having to go through and change the duration of the note preceding every bowed note is tedious.

b) Tying the attack of one note to the duration/adjacency of the prior is a misfit for articulation/expression map systems. These systems treat each note's articulation in isolation by sending control messages prior to that note. They can't go back and shorten the prior note. Where they offer support for shortening notes at all it is usually via a (whole number) percentage. Using such a feature to try to create gaps between all notes in order to avoid triggering legato, besides being silly, creates gaps that are too large as notes get longer.

c) Any gaps created to force a fresh bow are at risk of changing duration should the tempo need to be changed. That means that rebows can become legatos on tempo increases and vice-versa. People working on production deadlines need to be able to change tempos without auditing for these kinds of errors in large scores. Note that, by contrast, overlapped notes always remain overlapped despite tempo changes, because they depend on the _order_ of events, not the timing.

The current detache mode is not a solution to this problem. It doesn't support the full range of attacks, and poses even bigger problems for expression maps since it requires sending CC64 On during one note, and Off during another, a coordination not supported by expression maps.

What is needed is a way to force the bowing/legato via a message rather than by timing. I am not suggesting you remove or change what you currently offer, but that you might add some sort of explicit bowing control. It could, for example, take the form of one of the following:

1) a strict/keyboard mode for interpretation of "overlapped", generating legato only during actual note-on/note-off overlaps. It is much easier to get expression maps to make all legato notes overlap than to make all non-legato notes be preceded by a very small but not too small gap, as legato notes are marked via slurs (and thus have emap triggers) where fresh bows are not (they are the default in string scoring). It's also easier to create legato by hand by dragging for overlap, as the overlaps need not be precise since you don't hear them.

2) a new switch CC that toggles between bow-all (never legato) and the current legato sensing logic as-is.

3) a new interpretation of the portamento/legato CC 5 value 0 == bowed (non-legato)

I hope that makes sense. I am happy to follow up to clarify.

Thanks for your consideration,

Rich

Comments

  • Hello in the other forum for great virtual instruments :) !

    I am using Reaper and with same you can rather easily do versatile Midi preprocessors by JSFX plugins. I did that for a lot of my virtual instruments, supporting live-playing with different controllers.

    Maybe this might help here, too.

    -Michael


  • I appreciate that you are trying to be helpful but every time someone posts (in this and other forums) you reply with "... Reaper...". I am a programmer and can write control scripts many different ways and don't need Reaper to do so. What I need is communication from the developers. To be frank, entering four notes and getting bow-bow-bow-bow should require no effort at all, not shortening notes nor adding sustain pedal, and certainly not external scripting, in Reaper or otherwise.

  • edited February 2022

    Of course, if you are familiar with C++, it's not too hard to do Midi preprocessors as VST or similar OS library (dll...) plugins, especially when using Juce, but JSFX requires a much lower effort for this, as the DAW comes with the SDK built-in.

    -Michael

  • richhickey,

    "what is currently implemented is not legato triggered by overlap, an overlap being when the second Note On occurs before the prior Note Off, but instead is triggered by any gap shorter than a particular duration, by my observations in the realm of 8-10 milliseconds".

    Shorter than 8-10 ms? A legato/portamento is triggered whenever a note is overlapped by another note as far as it is playing, i.e. about 10 sec. As you may know it's the velocity of the overlapped note which determines, along with CC26, the duration of legato/portamento. It may vary between 30 msec to more than one second.

    "Tying the attack of one note to the duration/adjacency of the prior is a misfit for articulation/expression map systems".

    The attacks are independent of the duration of the prior note. In case of legato/portamento there are no attacks. Thus, we're unable to understand what you mean.

    "besides being silly"

    That's your personal opinion about what you seem to misunderstand. Sorry, but opinions should not overcome facts. The tone of a discussion should remain within the limits of good education.

    "What is needed is a way to force the bowing/legato via a message rather than by timing".

    This is feasible via CC5.

    Thanks for your contribution anyway.

    Best,

    Giorgio

  • Hi Giorgio, thanks for your response. Let me clarify:

    "Shorter than 8-10 ms? A legato/portamento is triggered whenever a note is overlapped by another note as far as it is playing, i.e. about 10 sec."

    I think you misunderstood what I said. Legato is also being triggered when notes are not overlapped at all, if the gap between the Note Off of prior and the Note On of successor is less than about 8-10 msecs.

    It is in this situation that legato does depend on the duration of the prior note, if it falls within this window.

    "The attacks are independent of the duration of the prior note. In case of legato/portamento there are no attacks. Thus, we're unable to understand what you mean."

    I am looking for fresh bows, with attacks, not legato, and am getting legato when I don't want it, because legato is triggered in cases when there is not overlap.

    Here is a video demonstrating the problem

    The video demonstrates that gaps shorter than 8ms play legato, and that gaps just greater than 8ms can become legato if the tempo is increased.

    "This is feasible via CC5."

    Please clarify how you can force a fresh bow with CC5. The documentation only describes switching between legato and portamento time with CC5. I am looking for an explicit control to switch between fresh bows and legato that is not based upon note timing.

  • richhickey,

    now I understand your point. The approach that we adopted, e.g. converting slightly detached notes into legato was dictated by some shortcomings of WC in overlapping notes, and by the requests of many who complained that in live playing, sometimes the desired series of legato note was interrupted by a staccato note, due to the premature release of the start note. The tolerance applied to the gap was theoretically of a few ticks. However, the script main loop run at 250 Hz, which means a resolution of 4 ms. Faster rates involved a much higher, unacceptable CPU load. Thus, any event shorter than 4 ms can be erratically handled by the main script. I verified that if the effective gap is 4 ms or more (tempo = 120) one will always get staccato. If slightly below this value, or if the tempo is > 120 one can occasionally get legato instead of staccato. If the effective gap is further reduced one will always get legato. Even triggering staccato by a KS or a CC would not solve the problem, due to the script temporal resolution. The only remedy is to separate the notes by at least 4 ms or more if tempo > 120 is contemplated.

    Best,

    Giorgio

  • edited February 2022

    "Legato is also being triggered when notes are not overlapped at all, if the gap between the Note Off of prior and the Note On of successor is less than about 8-10 msecs."

    if two notes are very close in time, the duophonic mode is triggered. Hence if Duo is enabled, the behavior is obvious.

    If duophonic is disabled, maybe some kind of glitch still adheres to that time contraint .

    -Michael

Leave a Comment

Rich Text Editor. To edit a paragraph's style, hit tab to get to the paragraph menu. From there you will be able to pick one style. Nothing defaults to paragraph. An inline formatting menu will show up when you select text. Hit tab to get into that menu. Some elements, such as rich link embeds, images, loading indicators, and error messages may get inserted into the editor. You may navigate to these using the arrow keys inside of the editor and delete them with the delete or backspace key.