Ghost notes not created from cross noteheads on unlinked tab staves

• Jul 22, 2015 - 20:58
S4 - Minor


You cannot copy and paste crosshead notes from Staff into (unlinked) TAB if the crossheads were (newly) applied from the noteheads palette: they are converted into standard noteheads instead!

However you can copy and paste crossheads from TAB to TAB and from TAB to staff (where the notehead was originally created by shift + X). And when such a crosshead has been pasted from TAB to Staff it can then be pasted into TAB!

The program should allow crossheads created by double-clicking from the noteheads palette to be copied from Staff to TAB.

Attachment Size
no_x_heads_in_tab.mscz 9.23 KB


More generally, applying a cross notehead to a tab staff converts it to a ghost note (displays with an X notehead) if the staff is linked - even if just linked to another tab staff - but not if the staff is not linked. This is regardless of doing it by copy and paste or the palette. That's because the special case handling for cross noteheads in Note::drop() exists only for the "if (links())" case. Not sure if there is a reason for this or any downside to it.

FWIW, if we're going to support that sort of automatic - treating a cross note head as an indication to convert a tab note to a ghost note - we might as well do it from the Inspector as well. Right now that doesn't work whether the staff is linked or not, because the speciual case handling is only in Note::drop().

I think I am missing some background on the whole topic: why are cross note head involved in tab at all? There are no note heads in tabs...

"Ghost notes" are commin in some style of music - notes where you muffle the sound somehow so the note is more "felt" than heard. It is customary to notate this on a standard staff with a "Cross" notehead. For tab, since there are no actual noteheads, there is a special "ghost" property that can be set on a note to indicate it should be displayed similarly. I guess maybe this was added for Guitar Pro support, but there is a keybaord shortcut "Shift+X" to set this property.

At some point, it appears there was code added to Note::drop() as a special convenience so that changing a standard notehead on a standard staff would automatically have the effect of marking the corresponding linked tab note as a ghost:…

I'm not sure this was ever documented or intended to be used in any other context than for linked staves, but it seems it would probably be harmless to also support for standalone tab staves.

It has also been proposed that it would be better to use a larger glyph for the ghost note. It looks like we use the letter "x" taken from the tab font. It looks like at one time this was designed to be configurable, as the value of "ghostChar" is used when rendering in StaffType::fretString():…

And the value of "ghostChar" is read in from the font description:…

So presumably a better glyph could be added and used in preference to "x" without any compatibility issues.

BTW, I see there is also an "xChar", but we don't seem to use it.

I know about ghost notes and I know about the contents of the tab fonts and about how it is used by the programme (I designed all this myself).

But I am still confused.

1) The tab implementation has the concept of ghost note.

2) It has a short cut to enter them.

3) It has the glyph(s) to render them

So, what is missing? If the glyphs are not correct, they can be improved, but this is not what seems to be asked here.

At a certain point, someone (not me, as far as I remember) added a trick to convert a given note head type into a note effect, maybe useful, I don't know, but it looks like a very ad hoc code and ad hoc code is rarely a good thing.

So, I still do not understand the problem. Why notes are not created as ghost notes in the first place?


P.S.: The "xChar" in tab fonts is for a completely different purpose; historic tabs often used 'X' instead of '10' as fret mark; currently the choice is not configurable; I hope in the future to add this configurability.

Sorry, I of course know you designed much of the tablature system, but since you asked about this, I figured some of this must have been added later - presumably jpirie. I just didn't know how much was yours and how much was not.

What seems to be the case is that at some point - GitHub's "Blame" function is not too useful here since the code was refactored since - the code in Note::drop() was added to automatically convert Cross noteheads into ghost notes. "Ad hoc" seems a good description indeed. I guess it was designed to work with linked staves where adding a Cross notehead to a standard staff via the palette would automatically convert the corresponding tab note into a ghost note.

It looks like it was designed for that specific use case only, but somehow, word must have gotten out and now people are expecting that using Cross noteheads should be a valid way of creating ghost notes in general. It's not a bad idea, but if we are to support it, I think it should be done dfferently.

Rather than try to catch all the places where the notehead might be set, maybe better would be to just let the notehead be set normally, but then convert the note to ghost in Note::layout() or somewhere else further downstream, so noteheads set to Cross get turned into ghost notes regardless of how the notehead was set? We'd need to convert the other way around as well. This doesn't happen currently even for the case this "ad hoc" code was designed to handle. That is, if you have linked staves, changing a notehead to Cross on the standard staff automatically marks the tab note as ghost, but changing the notehead back to Normal on the standard staff doens't un-ghost the tab note.

Thanks for the info about xChar!

Digging deeper into github showed that that trick was already there when we switched to github 3 years ago; chances are it dates from before I started dealing with tabs (and, indeed, I didn't know about this peculiarity, which I stubbornly keep calling a "trick").

My question remain: why notes are not defined as ghost notes in the first place? MuseScore has the notion and the command to enter it (it even has a default short-cut for it, which is not true for all the actions the programme is able to perform).

To be frank, I suspect that the point at stake here is not that tabs do not support this or that way of guessing user intentions, but that standard staves lack (a proper? a full?) support for ghost notes.

That's one way of looking at it, sure. I'd say, though, that for standard staves, using Cross heads for ghost notes is really just one particular use (among many) for non-standard note heads. I'm not sure it really makes sense to make a special case for ghost notes, although I don't have a problem with it, either.

In my perspective, the current implementation makes a special case for cross note heads, adding ad hoc behaviour to them.

From all this fuss, it is clear that ghost notes have an inherent meaning (rendering in tab is one facet of it, but other may exist, for instance exporting to MXML, audio rendering and so on).

As the programme already has the concept of ghost note and an action to turn any note into a ghost note, IMHO a more correct approach would be to complete the support for ghost notes and drop the ad hoc tricks.

I think that completing the support could entail:

1) Adding a check box to the note Inspector, so the applicable action would be clearly exposed (rather than buried in the list of short-cuts)

2) Defining a way to render ghost notes in standard staves, which could easily be the current choice of cross note heads.

Am I missing something?

I don't think so, that would definitely make sense. Although I said "ghost notes' are really just one particular use case for non-standard note heads, realistically, they are probably the only one worth exposing in the Inspector.

Status active closed
Regression No
Workaround No

Cannot reproduce with the file attached in issue description, copying works fine for me.

In the example file it says
> Cross-heads can neither be applied nor copied to TAB!

First of all i don't see cross-heads in the tab, but i can create them using SHIFT+x and subsequently copy them.

And i would agree that this is at least confusing - i realized for the first time that note "Head Group" is disabled in the inspector for tab notes, but when you turn them into ghost-notes, that change is reflected there. For that i'd go with another feature request to harmonize that behaviour (also it's crude that 'SHIFT+x' does one thing in tab staffs but another thing in clef staffs).

Closing this issue for now - if i did you wrong with this and missed something out here, kindly accept my apologies and reopen.

Title Ghost notes not created from cross noteheads on unlinked tab staves Ensure that ghost (crosshead) notes are retained when copying from staff to tab (in UNLINKED staff/tab)
Severity S4 - Minor S5 - Suggestion

Re-opened as a suggestion.

Title Ensure that ghost (crosshead) notes are retained when copying from staff to tab (in UNLINKED staff/tab) Ensure that ghost (crosshead) notes are retained when copying from staff to tab