'Open' volta lines must be extended over the entire 'ending' to play back correctly

• Dec 2, 2016 - 09:24
Reported version
2.1
Type
Functional
Severity
S4 - Minor
Status
closed
Project

In a lengthy discussion about repeats and jumps which was provoked by some crashes and hangs in 2.0.1, it became apparent that MuseScore does not read 'open' volta lines for playback in the same way human musicians do. This behaviour has been verified for 2.0.3 (by Marc Sabatella). It was also mentioned in this multi-part issue from 2015.

Steps to reproduce:
1. Create a score with four repeats and a separate 'ending' for each.
2. Place a standard 'closed' volta over the first ending.
3. Place 'open' volta lines over the first measures of each of the 2nd, 3rd, and 4th endings.
3. Number the voltas sequentially.
4. Set 'repeat count' to '1' for all voltas.
5. Play back the score.

Expected result: MuseScore should play the repeats through in the order the voltas are numbered, jumping to the beginning of each volta in sequence after each repeat.

Actual result: MuseScore repeats each 'ending' after every repeat, and then jumps to the ends of the subsequent volta lines after that. (See this score: Les Baricades Mistérieuses 20161123 volta line bug.mscz )

To obtain proper playback, the user must extend volta lines to cover the entire 'ending' for each repeat. (See this score: Les Baricades rev 20161124.mscz )

Standard notation (for human musicians) does not require the volta line to cover the entire ending, only the first measure of it. MuseScore playback should recognise an 'open' volta line as taking effect at its anchor note/rest and continuing until the next repeat bar (or until the end of the piece, if there are no subsequent repeats).

Presently, the only way to produce correct playback order in complex scores is to extend the volta line as has been done in the second score posted above. This is obviously graphically unacceptable, and requires a complicated workaround that includes making the actual volta invisible, and inserting an 'inactive' (graphics-only) line with the 'volta number' tweaked into position using vertical and horizontal offsets in the Inspector.

There's P_ID::VOLTA_TYPE which is an int. For some strange reason it is not linked between score and part (so changing type in one doesn't prpagate to the other), I believe though that it should.

The property P_ID::END_HOOK, a bool, is connected to P_ID::VOLTA_TYPE, false, no hook, means open Type::OPEN, 0, true, hook, means closed, Type::CLOSED, 1. Open being the default.
No idea why it is in ind rather than a bool, maybe yet another thing to fix.

You can still have a P_ID::END_HOOK_HEIGHT of 0sp though, so a closed volta that looks line an open one. You can't have an open volta that looks like a closed one though.

I don't see any provisioning for VOLTA_TYPE or END_HOOK in repeatlist.cpp, which I think to be responsible for 'unwinding' these playback loops. I guess Score::searchVolta() is the method that needs to be taught that this spanner really ends at the end of score or at the next repeats bar rather than at it's 'real' end.

Just quickly intervening on the current workaround:
You can add the open ended volta twice, one after the other. Then make the 2nd one extend and invisible. No need to put them on top of each other and work with the offsets.

Interesting. I must try that out. Thanks.

Easy question; does an open volta always end at the next endRepeat?

What you want is a shortened volta-line. not open-volta!

You may want to show them as "open" for very long passages.
In this case, we need the "shorten" feature. :)

If you want: Add following to the feature-request.

"Shorten" feture for voltas. (especially multi-line voltas):
Proposal: When "Volta" is shortened, it should turn from closed to open. And it only takes one measure.

(So: You will extend it to the next repeat sign. When the "Shorten" feature is selected, the software will shorten it.)

 Status (old) active ⇒ patch (code needs review) Status active ⇒

Reasons to end an open volta I could find (and are handled):
* found an end repeat
* end of section/score
* start of another volta
* jump instruction (such as DS/DC)

 Status (old) patch (code needs review) ⇒ fixed Status ⇒ fixed

Fixed in branch master, commit dd2050e2f1

fix #8604, fix #4525, fix #6091, fix #48456, fix #148276, fix #230531, fix #267778: improve volta playback
unwindSection using RepeatList as how a human will notate the volta: using the n-th time a startRepeat is taken, also slightly modified the jump detection logic to have it check for jumps only upon the last passage of a measure

 Status (old) fixed ⇒ patch (code needs review) Status fixed ⇒
 Status (old) patch (code needs review) ⇒ fixed Status ⇒ fixed

Fixed in branch 2.2, commit aaf88ffeb6

fix #8604, fix #4525, fix #6091, fix #48456, fix #148276, fix #230531, fix #267778: improve volta playback
unwindSection using RepeatList as how a human will notate the volta: using the n-th time a startRepeat is taken, also slightly modified the jump detection logic to have it check for jumps only upon the last passage of a measure

 Status (old) fixed ⇒ closed Status fixed ⇒ closed

Automatically closed -- issue fixed for 2 weeks with no activity.