Playback problems on repeat

• Nov 25, 2019 - 22:43

In this score En_el_Portal_de_Belén_Piano.mscz playback skips all measures affected by the second volta because the start repeat is under the 2nd volta from the first repeat. An open volta such as that should not prevent a repeat from working. What do others think? @jeetee?


Comments

It seems to me that there exists a 'nested' volta. That is, the open 'volta 2' in measure 11 includes a 'volta 1' in measure 18.
Nested voltas (and nested repeats) tend to be problematic.

Here are 2 alternatives:
En_el_Portal_de_Belén_Piano_2.mscz
En_el_Portal_de_Belén_Piano_3.mscz

I prefer the first alternate.
(Changing the G4 note in the treble staff of measure 18 from a quarter note to a half note (as in measure 19) would further simplify the 'roadmap' and would eliminate the '1 volta' in measure 18.

The issue is indeed the start repeat being covered by the 2nd volta which is also linked with the first start-repeat. The non-obvious workaround, which might break in the future is to give that 2nd volta a repeatlist of "1, 2", see attached.

@Jm6stringer: the volta's aren't nested in the interpretation by MuseScore. The open volta ends when the next volta starts.

As much for myself as a future reference, as for anyone interested into how this score is processed:

  1. Upon reaching m3, we discover the start repeat. An attempt is made to discover how many times this start repeat will be used a return reference point. The score is scanned for end repeats until we're at the end of the section, or until another start repeat is found. The repeatCounts for those end repeats are taken into account.
    In this score that means we discover the end repeat of m10 and then stop looking because of the start repeat in m11. The resulting count for this start repeat is evaluated as 2.
  2. We are now at the first playthrough (in reference to the start repeat of m3) and continue down the score
  3. At m10 a volta is found, its repeatlist is compared against the playthrough count (which is at the moment still relative to the start repeat of m3). The match is valid, the measures under the volta will be taken, thus we continue processing.
  4. At m10 the end repeat barline is found. The playbackcount of that specific measure is compared against the repeatcount configured for it. This is the first time we play this measure while the repeatcount is at 2 → this means we should honor the repeat.
  5. We jump back to our start repeat reference point (m3), its playbackcount is now increased to 2 and we're no longer under that volta.
  6. We again find the volta at m10; but this time the repeatlist doesn't contain the playbackcount of our start repeat reference measure. → We have to skip this volta and forward to m11
  7. In m11 we find the volta.
    We compare its repeatlist (2) with the playbackcount of the start repeat reference measure (still m3 at this point!). It is a match, so the volta is taken.
  8. Now we discover the start repeat of m11, which makes this repeat the new start repeat reference point. Again an attempt is made to scan how many times this repeat should be encountered. The end repeat of m18 is included and then scanning hits the end of the score. The resulting count for this start repeat is evaluated as 2.
  9. We continue through the score and find the volta in m18. Its repeatlist is compared with the playthrough count of the start repeat reference playbackcount (which is now 1, from m11) → this is a match and the volta is included in playback.
  10. The end repeat of m18 is encountered. This is the first playthrough of m18 and the repeatCount is at 2, so we honor the repeat
  11. We jump back to our start reference repeat point, which is m11
  12. We find the volta of m11 its repeatlist is compared against the current playbackcount of the start reference measure (which is also m11, but hasn't been increased yet at this point in the evaluation). → They don't match, and we skip the volta, forwarding us to m18

This is where the current logic is flawed with the current scenario

  1. At m18, the volta is evaluated. As m11 was skipped, its playbackcount is still at 1 and this volta is matched again → m18 is included in playback
  2. The end repeat of m18 is evaluated. This is the 2nd playthrough of this measure, and the repeatcount is also 2 → used up all repeats, continue to next measure
  3. The volta at the start of m19 is evaluated. Its repeatlist is 2 while the referenced start repeat measure playbackcount (m11) is still 1 → the volta is skipped.
  4. We forwarded to m20, which is included
  5. End of Score

Thus by changing the repeatlist of that volta to also include 1 we make it so that m11 can be found after the first volta. This way it gets played back a 2nd time, so that by the time we arrive at m18/19 the referenced measure playbackcount is the expected 2.

The difficulty with interpreting this notation is thus to know that the volta of m11 is actually only in effect when evaluating with reference to the start repeat of m3 and not compared to the start repeat of m11 itself. And I currently can't yet come up with a good way of detecting that, without breaking other scenarios..

Attachment Size
297656_En_el_Portal_de_Belén_Piano.mscz 17.03 KB

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