Jump into Volta "with Repeats"

• Feb 19, 2018 - 22:02

While working on #269603: Repeats, Jumps and Volta follow-up a scenario arose for which I'm unsure what the 'proper' handling in playback should be. Given the following sample:

The current implementation (2.2 & master) plays pack as follows if the DS has playRepeats turned off:
1,2,3,4, 1, 5,6,7, (jumps to segno in m3, but then skips that volta), 5, 8

In order to unify the code between having playRepeats enabled and disabled; my new algorithm could do one of the following (still consider playRepeats to be off):
Scenario A
1,2,3,4, 1, 5,6,7, (attempt to jump, but don't find the segno as it's hidden by its volta => consider this jump invalid and ignore it), 8

Scenario B
1,2,3,4, 1, 5,6,7, (find the jump, assume the composer really wants to jump there and rewind the score back to the segno), 3, 4, 1, 5, 8

Keeping the current implementation is possible as well, but would require special handling, something I'd rather avoid.
Any arguments for picking scenario A/B over the other? My personal preference now would be scenario A, as scenario B (in this case) would basically be the same as having playRepeats turned on.

Just for completeness sake, the roadmap that will be taken with playRepeats set enabled will be:
1,2,3,4, 1, 5,6,7, 3,4, 1, 5, 8


My first thought is that this situation is obscure enough that I wouldn't lose sleep about it :-) If a student turned in a chart like this I'd ask them to rewrite it to be more clear, as I suspect if you ask three different musicians you'll get three different interpretations.

That said, while the standard is for repeats to not be taken on a DS, I have to imagine anyone with common sense would see that you need to take the repeat anyhow here or you won't have anywhere to go after measure 4 on the DS. So, I go with

1 2 3 4 1 5 6 7 3 4 1 5 8

Which is to say, exactly what I'd also expect if you did specify you wanted repeats taken on DS. but I'd definitely agree it is bad practice to place the segno within the volta, and wouldn't blame you a bit if you ended up with your scenario A.

In reply to by Marc Sabatella

@Jeetee : I think there is confusion.
In my tests, at no time do I refer to a Segno placed as you did. I agree with Marc: it makes no sense in music. The segno must be before the 1st volta ( when there is ). The bug, in fact, concerns "To Coda" which no longer works when "play reapeat" is active.
R0 and R3 work very well, "Play repeat" active or not.
R1 does not refer to the segno but to the second volta when "Play repeat" unchecked ( quite logical since in this case we do not replay these bars ) and nothing works when checked.
R2 worked well when "Play repeat" unchecked but "To Coda" ignored when checked.

@Marc : A segno placed between 2 repeat bars is quite common in French, the old ( and less old ) French songs which some verses are "bissed" involve the repetition for each verse or chorus. Some french publishers even use voltas with repeats by Segno. We are far from Elaine Gould. ;)

In reply to by Miré°

Thanks for the response.

From a programming pov, my scenario and your R1 in the internal score representation both have the segno covered by the volta1.

I'm aware that the main issue is the ToCoda not being taken and have solved that in my local version, a fix is coming this week!
But currently the unwind logic is different when we have playRepeats on vs when it is off (a different block of code). I see a way to make the code a single block in handling this and as a consequence bumped into this (not really expected) scenario that it didn't clearly know how to handle yet.

My first thought is that the scenario you are describing is unacceptable and ambiguous in a score so whatever you implement would be equally acceptable. In the off chance someone does this, I think they will just live with the results. This is true whichever method you implement.

With careful consideration of what the user would probably be looking for, scenario B seems to be more logical. If someone puts a segno in the middle of a volta I suspect they would expect the repeat to be played.

It's not the same topic, and actually I don't have time to report it - but when you're there to investigate the rules of repeats, I think it's just worth to investigate "d.c. al coda" or "d.s. al coda" when there’s a section break between it.

In reply to by mike320

As mentioned it's a similar but not the same topic. In a forum thread a while ago I mentioned it could be useful (and would in some scenarios make a sense) to jump to a measure via "d.c. al coda" or "d.c. al segno" before a section break. Such as it's possible in case for a line break or a page break. But it's worthy for discussion.

In reply to by mike320

Currently in code for a jump, the labels are first searched for within the section. I haven't verified/tested, but it looks like the search function then moves on to scan the full score (front to back) to attempt to find the label if it couldn't be found within the section.

So my guess is that, yes cross-section jumps are possible; though they are currently entirely untested. Do feel free to provide some simple test scenarios with their desired playback roadmap in a new topic to open up that discussion.

Do you still have an unanswered question? Please log in first to post your question.