Tablature: unexpected default behavior with tied fret mark and parenthesis

• Feb 12, 2019 - 07:05
Reported version
3.0
Type
Functional
Frequency
Once
Severity
S3 - Major
Reproducibility
Always
Status
closed
Regression
Yes
Workaround
No
Project

3.0.2 / Windows10

Since this commit : #266019: In Tablature, hidden note after tie should be between parentheses instead under some conditions something has changed in the behavior. If we can understand the purpose, on the other hand, the way to achieve it is not defined (or I have not understood it - where is the option, where should it be checked?) and above all causes a new unexpected "default".

Currently, when "Show back-tied fret mark" is disabled, you get this result. Unexpected.

cas3.jpg

Maybe this is an opportunity to get things straightened out, and to clarify the whole thing.

1) The new defect should be: no tie, no fret mark (as requested in the forums, and as is now the norm in published scores). Currently, it's necessary each time to hide the ties.

The old default sort on "in-between" could be justified as long as the "Show back..." had not been implemented. This is no longer the case.
cas1.jpg

2) The current "Show back-tied fret mark" (tie and fret mark)

cas2.jpg

3) Option to add parenthesis (so tied and fret mark and parenthesis), under certain conditions as described in the first implementation message, ie:
-If the tied not is on a new system
-If the note is bended, has a fingering or other text attached

But where would this option be located? To the right of "Show back..." in the Advanced Style Properties?

cas3.jpg


Comments

In reply to by cadiz1

I am sure I saw this display (image below - misplaced fret 3 with parenthesis/tie) on the forum a few hours ago. That is one of the consequences of this issue. Unfortunately, I am unable to re-find the comment, probably included in a thread of another nature or related.

tie.jpg

The code that we have in place to handle this fails here because at this point in the layout process, chord()->measure()->system() is NULL, which is not equal to tieBack()->startNote()->chord()->measure()->system(), and therefore paren is set to true, and fretHidden remains false. I tried replacing that test with this:

      System* s1 = chord()->measure()->system();
      System* s2 = tieBack()->startNote()->chord()->measure()->system();
      if ((s1 && (s1 != s2)) || el().size() > 0)

which sort of worked, but not 100% reliably. I think what we need to do is make sure that we have a valid system for chord()->measure() first, and once we do, then check whether or not it is equal to tieBack()->startNote()->chord()->measure()->system().

I'm still struggling to understand the expected behavior. I gather there was something that worked well enough, then a change was made for #266019: In Tablature, hidden note after tie should be between parentheses instead under some conditions to provide additional capabilities, and in the process, the default changed, and people want the old default back. So if we look at how 2.3.2 works, that will tell us what is expected? Sorry, tablature is not my native language. Can someone post a really specific proposal?

In reply to by Marc Sabatella

"Sorry, tablature is not my native language."

Yes, unfortunately, there is no longer a pilot on board here for two or three years now (I'm talking about the TAB part)

What is surprising is this Lasconic's commit: #266019: In Tablature, hidden note after tie should be between parentheses instead under some conditions
He opened it himself on November 22, 2017, and immediately the next day, the commit was merged. Without other form of trial. Without debate, without discussion, without explanation. This is not like him, not his usual way of doing things.
This remains a sort of mystery, and as I have the impression that he too no longer intervenes in the program, I am totally cirsconspect on the interest of this commit (of which in truth I do not understand all of me either).
I had made a proposal of the behaviour expected at the beginning of the issue report, but I admit I forgot a little about it and I then had dropped the question since because it remained unanswered.

OK, well let's figure it out and get it done.

From what I can understand it seems the use of parentheses here is similar to what has also been suggested for accidentals on tied notes in standard notation. Normally if a tied note has an accidental, you don't show the accidental on the second note even if it is in a different measure from the first. The exception is if the notes are on different systems. Then it would be nice if MuseScore automatically generated the accidental (and put it in parentheses).

I believe the issue in this thread is similar: the second note in a tie is not normally shown in tablature (just the accidental is not in standard notation), but if it is on a different system than the first note, we should go ahead and display it (and put it in parenthesis). Except in addition, there is this option that can be used to turn these tied notes on or off. And I guess "on" shown mean "always on" but "off" should mean this new behavior. Or else maybe there should be three settings, on/off/auto.

If this understanding is correct, then what we need is to put off making these decisions until later in the layout process than we currently are. Both decisions - about displaying accidentals and about displaying the second note in tablature - are made before we know for sure if this note is on a new system or not. And yet, it should not be hard to rearrange things a little to get that information.

So, is my understanding correct? And if so, is it OK to not introduce the new "auto" setting but just have "off" mean, "off except at the start of a system"?

  • "show back tied notes" on: always show them
  • "show back tied notes off: don't show them except at start of system, and in that case, show them and put them in parentheses

As Matt says, this is what the code is trying to do but it just isn't working.

Marc Sabatella wrote:
"Show back tied notes" = ON: always show them.
"Show back tied notes = OFF: don't show them except at start of system, and in that case, show them and put them in parentheses
."

That's correct. And in the case of a chord, only one set of parentheses should be used: e.g.

back_tied_chord.png
Kaplan, Contemporary Jazz Guitar Solos (Berklee Press, 2016).

However, not all scores show back-tied notes at the beginning of a new system. IMV, it should be an optional feature.

in the case of a chord, only one set of parentheses should be used
We can certainly look into doing that. Perhaps that should be its own separate issue.

I don't want to miss one of the earlier points made here, which is that we should not be showing the tie itself, unless "Show back-tied fret marks" is ON. And based on the picture that geetar shared, when the fret marks are shown in parentheses, the tie still should not be shown. To hide the ties, we can place the following code at the beginning of TieSegment::draw()

      // hide tie in tablature if we are not showing back-tied fret marks
      StaffType* st = staff()->staffType(tick());
      if (st->isTabStaff() && !st->showBackTied())
            return;

This is similar to the way that we are already hiding back-tied fret marks in the first place.

Another question: if we are unable to get this working as expected soon, would it be preferable to simply revert the change that started this, and put things back to the way they were, where disabling "Show back-tied fret mark" just did this always? And, I guess, also hid the tie itself?

Well, it is easy enough to get the previous behavior without reverting the entire commit. Just change that one condition to something that always evaluates to false.

"would it be preferable to simply revert the change that started this, and put things back to the way they were"
In the absence of a lasting solution, this return to the previous situation would be personally appropriate for me, and anyway will be preferable to the current messed behavior.
"And, I guess, also hide the tie itself?"
Yes, absolutely.

Fix version
3.2.0