Time Stretch with Multiple Voices

• Jul 11, 2017 - 20:43
Type
Functional
Severity
S5 - Suggestion
Status
closed
Regression
No
Workaround
No
Project

Right now, time stretching with ornaments has peculiar behavior if there are ornaments over notes that start on the same beat in different voices/staves/instruments (it's all the same behavior). Time stretch currently takes precedent as the first non-1.00 (that is, the first note without an ornament with a time stretch value of 1.00) descending- it checks the first voice of the first staff of the first instrument, and then works down through the voices, then staves, then instruments. Anyway, the issue is that this works only for a time stretch value greater than 1.00. If I have an ornament somewhere "above" another one, and the "top" ornament has a time stretch value of 1.00 and the "bottom" has, say, 0.50, then nothing happens.

To reproduce:
1) Create new score with any instrument.
2) Place one note in voice 1, another note in voice 2.
3) Place a fermuta over both notes.
4) Set the time stretch value of the fermuta over the note in voice 2 to be 0.50

Expected: Note plays back at 0.50
Actual: Note plays back at 1.00


Comments

I should note that this:

1) Create new score with any instrument.
2) Place one note in voice 1, another note in voice 2.
3) Place a fermuta over both notes.
4) Set the time stretch value of the fermuta over the note in voice 2 to be 2.00

Expected: Note plays back at 2.00
Actual: Note plays back at 2.00

Works as expected. It only does not work when the value is less than 1.00- it works perfectly fine when it is greater.

Status (old) active needs info

Your conclusion is incomplete.

1.) New Score
2.) Place a single note in voice 1, and another with the same duration and at the same beat in voice 2
3.) Place a fermata over both notes
4.) Set time stretch for voice 2 to 5,00; set time stretch for voice 1 to 0,99

Actual: resulting time stretch for both notes: 0,99
Expected: god knows what would be correct in this case, perhaps use the largest value?

I've even added a 3rd voice and fermata to it with a stretch of 2,00.
Then setting the voice 1 back to the default of 1,00 makes it pick up the delay from voice 2.

Conclusion: With time stretch applied to the same segment in different voices, MuseScore uses the time stretch value from the first voice of which the value is not 1,00 (the default value meaning no stretch).
My gut feeling is that it should take whichever is the highest value, but I've not thought this through as to what is supposed/expected to happen with one fermata happening during another one (half note in voice 1, with fermata; and a quarter rest and note with fermata in voice 2, for example)

I'm thus guessing this behavior is currently by design.

If it's by design, I can't imagine it's intentional. If I have a quarter note in voice 1 and two eighth notes in voice two, there's no way to get the first eighth note to play faster than the second without muddling with overlapping time stretches.

My understanding of how it works is that it picks the first non-1.00 time stretch value, descending from the first voice to the second to the third to the fourth, then to the second staff, then second instrument, until it runs out of choices.

So, if it's trying to pick the first non-zero option, it's failing at that because it's also trying to pick the highest. If it's trying to pick the highest, it's failing at that because it's also trying to pick the first. Both work for my purposes, but I need either one or the other. Not this current situation. Trying to do both just leaves it broken.

(I mean, don't get me wrong, I can even get this current setup to work. It's just far more complicated)

To me, the issue of "pick the largest one" is that I cannot imagine any use case whatsoever where you would have more than one non-1.00 articulation on a single beat. What could you possibly be trying to accomplish with that? Having it choose the first non-1.00 makes more sense to me because you're generally only ever going to have one non-1.00 articulation on a beat.

A value of 1.00 means no change, in effect the same as not having the articulation at all; therefor picking the first non 1.00 value is extremely logical.

It is impossible to set a time stretch to 0.00 and it would be extremely nonsense to do so, as you would be requesting time to halt; i.e. never getting past that note. MuseScore is not comparing values and looking for highest or whatever, it simply takes the first non-1.00 value and uses that.

In whichever work you're working, all that is needed is to leave all fermata's at the default value of 1.00 except the one you wish to affect the playback; as you yourself just said, you expect to only ever going to have a single non-1.00 articulation on a beat. And it is that one that MuseScore then should use.

Your original bug report still holds; the only reason I'm questioning here is if there are more non-1.00 values if in *that scenario* it wouldn't make more sense to not pick the first non-1.00 value, but rather pick the highest non-1.00 value.

The only reason all articulations have a time stretch option is because there was no way to single out fermatas when it was added. If fermatas were something entirely separate, then the option could be removed from articulations and ornaments.

Time stretches should used on legato, staccato (and related) and marcato ornaments to determine the length of the notes. IMHO it should only affect the specific note without affecting the rest of the score. This of course is a different result than fermatas and pauses.

I used the time stretch feature all the time with my scores. I placed invisible fermutas wherever was reasonable when adding time stretching, but if there was already an articulation over the note in question I'd just use that instead.

Actually, I wouldn't even be able to place invisible fermutas on the notes with other articulations due to another bug- that only one articulation (the last one put on) actually plays and the rest do nothing.

Honestly, I think the easiest solution to this issue is just have it take the product of all time-stretches for each given beat to be the active time stretch. It already does this for overlapping time stretches (a half note on the first beat and a quarter note on the second beat, both with 2.0 time stretch, will make the quarter note effectively have a 4.0 time stretch), so it would be consistent with other behavior.

You don't have to care about any sort of ordering, you don't have to care about "is it a 1.00 or is it not?" because it doesn't matter, and the input box already only accepts inputs greater than 0.00.

Severity S4 - Minor S5 - Suggestion
Status needs info closed
Reported version 2.1  
Regression No
Workaround No

The time stretch option has been limited to fermatas in the latest version. It gives the desired result for fermatas but not for other articulations/ornaments.