A) It is not scaled correctly
B) Is it scaled differently for the same settings in different circumstances
C) It is doing nothing on some base switches (Tremolo here)
In each of the pictures length is set to 1% in the expression map.
Here, the played duration is rendered at approximately 75%:
Here, both “Natural” and “Tremolo” are set to 1% length in the expression map, yet “Natural” is yielding about 95% played duration, and “Tremolo” is showing no truncation of length whatsoever:
Although it’s perhaps not clear from the interface, that Length % field is only applied when Dorico is processing slurs. It’s effectively an override to the Play as % of written duration option on the Timing page of Playback Options.
I think “perhaps not clear” is doing a lot of heavy lifting.
To quote the entry in the latest manual…
Length % Allows you to modify played note durations, which overrides the default value; for example, if you want the selected switch to produce short gaps between notes.
For notes a quarter note or shorter in duration, the value applies to the entire note.
For notes longer than a quarter note, the value only applies to the last quarter note of their overall duration.
No, its not, as I just showed very clearly. The note lengths in the above pictures are truncated non-legato whole notes, their length being shortened by the “Length %” function in expression map. You’re wrong.
And that section has options for 6 different note types, of which why would anyone assume that the “Legato” is the only note type specified by the label “Length %” in the expression map? If it is the case that the length % is only intended for legato notes, then what is the logic for not simply labelling it as such, e.g. calling it “Legato Length %”?
Also, I need to note that the main reason I am trying to use this is to fix/workaround another problem where the tremolos are getting MIDI note-off messages crossed with Expression Map MIDI messages on the following note.
As I detail here: What is the intended timing for MIDI messages sent by expression maps? - #2 by VV1
The Expression Maps are sending the MIDI messages of notes 528 samples earlier than the note-on messages of the corresponding note. This is very early and totally unnecessary, and in the case of tremolo notes, which for some reason have a longer duration that normal notes, causes issues in the timing of switch messages happening in the wrong order.
Being able to shorten the played duration of tremolo notes would at least provide a workaround for this error.
Yes, you’re right – although I checked the source code when I answered this morning, there are two places where this factor is used; one is when Dorico is processing a slur, and the other is when it is setting the length modification for the note. I apologise for my mistake.
In this latter case, Dorico limits the amount of shortening that can be applied. Essentially, the length modification will only apply to a maximum of one quarter’s duration of the note. So if you have a whole note, for example, the length modification will only apply to the last quarter of the whole note’s duration.
Regarding the other thread you have linked to, I haven’t yet had a chance to look into that in any detail, but it’s on my list of things to investigate when I have time.
You still need to address why the Length % is not functional for tremolo notes and why that length is interpreted differently with other variables (instrument, tempo??).
In my Thundersheet example it had no obvious effect on tremolo note length, and it had a much smaller effect than expected on the natural note, where a setting of 1% length in the expression map has yielded a reduction of much less than the quarter note length which is the amount you say it should be truncated by at that setting.
The Length % parameter is not applied to tremolos or trills, or other generated notes. It is similarly not applied to unmeasured tremolos played via a sample rather than by generating notes.
Some additional things to consider here: if the note has a staccato or staccatissimo articulation, the length override will be applied to a maximum of one quarter’s duration of the note as written; but if not, the length override will be applied to a maximum of one quarter’s duration at a tempo of 120bpm.
The basic expectation is that a “Length %” parameter would apply to any notes triggered by that corresponding playback technique of the expression map. If you are using tremolo or trill in the expression map and want to choose the length % of those, what is the benefit of blocking the user from doing so?
If the control is “length %”, why not just have it do what is says:
change the length of the output note by that percentage?
Why all the under-the-hood idiosyncratic conditions?
The rationale for not applying the length adjustment to tremolos is that if you write a series of notes marked with tremolos, e.g. moving through a series of pitches, you wouldn’t want there to be gaps at the points where the tremolos move from note to note.
I don’t think it’s as simple as that, unfortunately. A measured tremolo doesn’t produce a different playback technique, so those notes will be played back using whatever the prevailing combination of playback techniques is. So if you didn’t want the duration in which Dorico generates repeated notes for a measured tremolo to take the length parameter into account but you did want it to be taken into account for notes that aren’t adorned with tremolo beams, you wouldn’t be able to do so.
If you already apparently have a different set of instructions under the hood for measured vs unmeasured tremolo, then you could leave the Length % effect to only control what technique it is chosen to work for in the expression map, which already excludes measured tremolo.
Also, I must point out that the described hidden conditions you talk about for scaling, note duration and tempo are not consistent for UX expectations with the other MIDI controls you have there.
“Length %” sits under “Transpose” and “Delay”, both of which apply simple math functions to MIDI without a hidden formula.
When dealing with such transformations of MIDI messages, the expectation of what the control does should be obvious from the label.
“Transpose”, as expected will add or subtract semi-tones to/from the signal by the displayed value; a simple binary operator.
“Delay”, as expected will add or subtract milliseconds to/from the note position by the displayed value; also a simple binary operator.
“Length %” by extension of that logic, should do exactly what it says:
scale the played duration of the MIDI by the displayed value.
Both the “Transpose” function and the “Delay” function would not be considered to work correctly in this context if they applied more complicated math operations to the input data. The basal expectation is very obvious from their labels as to what they do.
If I input “+12” into “Transpose” and it is transposing G3,Bb3,Db3 to Gb4,Bb4 and D4, I would certainly not consider it to be working properly.
For that output to be considered correct, you would need further options for the user that specifies scale/pitch collection remapping in addition to the transposition.
If you want to have options for scaling input/output based on certain contexts, then add those conditions as options in a new dialog.
Otherwise, inputting “1” as a value for a modifier called “Length %” and having the output of that modifier act anywhere between 75-100% (certainly never 1%) is incorrect. From a UX perspective, that is incoherent design.