Some problems with repeats and voltas in anticipation of relese 3.5.1

• Sep 26, 2020 - 17:37

Using version 3.5.0.13199 Win 10.

First of all, let me congratulate you all on your excellent work. MS is better and better every day!

I know there are several bug reports about repeats and voltas. A few are slated to be addressed in 3.5.1. 
I created a file with a very streamlined variety of "test cases" with DS, DC repeats coupled with voltas. Nothing too fancy, pretty much voltas contained within DS, or DC. no "strange" jumps. 

Most work with 3.5.0 with the suggested additions of section breaks on the DS, etc. They could be used as a fast check on changes (some kind of oracle).
The cases are named, and following each one, there is a text frame with detailed descriptions, so you don't have to be jumping from this post to the score. :-)
In these cases, I also created my own "types" of segnos, codas, jumps etc. I modified the names and the tags and they seem to work correctly.
Now, TEST CASES 6 and 12 DON'T WORK, and in a very strange way. There seems to be "interference" between cases (or perhaps sections)! The case starts and then it jumps to a differente case (specifically, to case 5, as explained in detail in the text frames after each test case. I added an isolated file with the same elements of case 6 and it runs perfectly.
It is possible that although I reviewed it, there are obvious mistakes on these 2 cases. Particularly I noticed that if you inadvertently click twice when placing a volta, you end up with 2 voltas, perfectly superimposed! You change one, (repeat list, text etc) and the other one is still there! I think I cleared those cases. Shouldn't there be a warning by the program that prevents that, because it is very hard to find?
If something like that is not what's wrong with these 2 cases, and it is some kind of interference with the tags, then I think a clearer explanation of the range or scope of "sections" and marker "tags" would help users a lot.
Also, when creating or modifying jumps, markers and tags, are there limitations?
For example:
Are Segno and Segno Variation used as automatic shortcuts to provide segno and varsegno tags, or could you add your own tags with these types.
Same for Coda, Varied Coda and Codetta? To Coda is pretty clear, but Custom is not.
Can you use a "custom" marker as a "segno", "tocoda" or "coda"? I did in my test case 7 and it seems to work. Maybe that's what broke test case 6 :-) !

In any case, I hope this file is useful to check the behavior with very small pieces.

Again, my sincere congratulations for the effort all of you have done to create a friendly and useful program and for the courteous (and patient!) responses, even when the posters sometimes are not that friendly or patient :-).

Attachment Size
case 6 isolated.mscz 16.97 KB
200920 TEST JUMPS.mscz 25.92 KB

Comments

You've put in a good effort of work in testing things out, and I'll try to address your questions.
First off, you might be interested to know that the files we use for testing the repeat logic are all publicly available and can be found at https://github.com/musescore/MuseScore/tree/master/mtest/libmscore/repe… . These might help you out as examples for how we intend them to work as well.

The major workaround required today, that is fixed in 3.5.1 is that a plain D.S. required a section break to function correctly. Other jump types (so as soon as "continue at" wasn't empty) did not suffer from this bug.

As for your test case 6 and it's strange behavior, you have an empty-text jump marking in the first measure, referring segno/(to)coda3. Knowing that, playback works out perfectly.
This is equally present in the isolated test file, but there you don't notice the jump, as it can't find those referred symbols from the other tests, which are no longer included in this isolated file. That empty-text jump marker thus becomes invalid and is ignored. Save As your isolated file as an mscx file and open it up with a plain text editor to see the following:

      <Measure>
        <Jump>
          <style>Repeat Text Right</style>
          <size>14</size>
          <text>
</text>
          <jumpTo>segno3</jumpTo>
          <playUntil>tocoda3</playUntil>
          <continueAt>coda3</continueAt>
          <playRepeats>1</playRepeats>
          </Jump>
        <Marker>
          <style>Repeat Text Left</style>
          <minDistance>-15.351</minDistance>
          <offset x="4.50313" y="-2.7566"/>
          <text><sym>segno</sym></text>
          <label>segno6</label>
          </Marker>

This also explains why the seemingly identical test case 9 doesn't have this behavior (it doesn't have this empty jump marker).

How are jump targets located (from 3.5.1 on)?

There are 2 special cases, namely the target labels "start" and "end", which should not be given to a marker in the score.
start always evaluates to the start of the current section (= the section of this jump which is being evaluated).
Likewise end always evaluates to the end of the current section.

All other labels are searched for in the following order:
1. Starting from the Jump instruction, look backwards within the current section. If found, stop looking.
2. Starting from the Jump instruction, look forwards within the current section. If found, stop looking.
3. Starting with the previous section, search backwards through all previous sections (thus until score start). If found, stop looking.
4. Starting with the next section, search forwards through all following sections (thus until score end)

When processing a jump, we try to carry on as far as we can. So if you've set a D.S. al Coda, but left out the segno marking, no jump will happen. But if you did have the segno marking, but are missing the "to coda", then the jump to segno will happen.

Do let me know if you have any further questions. I very much appreciate the thought you've put into your post and the effort in trying to break my code ;-)

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