Chord symbols with System flag set do not transpose when propagated to parts

• Jul 29, 2014 - 06:40
S4 - Minor

Ubuntu Studio 14.04, GIT commit: ae475eb

First reported in

1) new score for flute & Bb clarinet, C major
2) add C chord symbol to flute part
3) right click chord symbol
4) text style
5) click System flag
6) OK
7) generate parts
8) view clarinet part

Result: chord renders as C even though part is transposed and should thus be D

I have no particular expectation that this would work; as far as I am concerned we could simply ignore the System flag for chord symbols. But, if we honor it, it does need to transpose. See also #28401: Chord symbol entered after parts generated not transposed if score and part are at different concert pitch states, although that's not exactly the same issue. Could well turn out to be the same areas of code involved, though.


It raises more questions... What if the user creates a score with Bb trumpet and flute and put the chordnames on the Bb trumpet staff. The chordnames are considered attached to this staff, so they are transposed. Is that expected?

Also, if the order of instrument changes, a "system" chordname will not move with the top instrument... so if the first staff is Bb trumpet, the second flute, and we flip them...

*If* we were to support System flag for chordnames, yes, we'd have to deal with these cases. And actually, this is as good a reason for not supporting it as I can think of. It would be quite misleading to look at a transposed score with a chord symbol on the top staff only (which as often as not would be for a transposing instrument) and have to know it applies differently to all staves.

So I think I will just disable the System flag for Harmony objects. I can't prevent people from setting it in the text style, but we won't do anything with it. I'll submit a PR on that.

It means we would loose the ability to export chord symbols to all parts. Do we really want this?

Sibelius doesn't support system chord symbols as far as I can tell. There are several questions online about how to get the chords in all parts. The answer is to copy paste them...

If we wanted to do better, we could display system chord symbols always in concert pitch? Would it be better than just removing the feature, and loose the linking?

If you mean, we lose the ability to have only one chord symbol in the score, have system flag set, and this forces it to be exported to all parts, yes, we lose this ability. But that's not how things are usually done anyhow. Unlike tempo markings and rehearsal marks, chord symbols really are normally present on all relevant staves. But it's very unusual to have a score where all instruments actually needs chords - normally it's just a subset of the instruments in the score. If we supported something like Finale's "staff lists" - where you specify which staves a "system" element should apply to - then this ability might become more interesting.

I think displaying chord symbols in concert pitch would be a problem. It's not normal to see notes transposed but chords not (although I know *one* guy who likes his music printed this way). People wouldn't realize that was what they were looking at. Although if it's only for score and not for parts, it might be OK. I don't know, I have *never* seen a published score do anything like this at all, though - it's always a case of each staff getting its own chords in its own key.

If we are to allow "system chords", I think we need to do all the things you mentioned - constantly re-transposing for each staff in parts, re-transposing in the score if the staff order changes. Doesn't seem worth it to me for a feature that wouldn't normally be used. But if you've got a fix, be my guest!

If you mean, chord symbols not actually attached to those staves but only attached to the top staff with the systemFlag set to try to force them to display on other staves, then yes. But chord symbols actually attached to the other staves would still trigger the staff to not be hidden - if annotations currently did that at all. And actually, they don't. That is, with or without this change, a chord symbol on an otherwise empty staff will not prevent it from being hidden. Nor will a staff text, a dynamic, or even an explicit rest. it takes an actual note to prevent a staff from being hidden.

I might consider that a bug in itself, but it's totally separate from this issue.

Chord symbols with system property set should display on top stave, just like e.g. segno. Whether they should propagate to parts and whether to transpose there might be a different issue, I'd say yes to propagate and no to transpose, but that's probably just me.
Are there transposing instruments that are capable of playing chords, multiple notes at the same time.

What I am saying is, I think we should completely disable the ability to set system flag for chord symbols, as being far too much hassle to be worth it. So even if you set the flag in the text style, it will have no effect whatsoever. It will still display only on the staff to which it attached. I think the moment you support system flag at all, you have to go all the way, with transposition and everything, and I just don't see the point. I've never ever seen music published that way, Sibelius doesn't support it, etc.

As for transposing instruments that can play multiple notes, if you think of a guitar as transposing at the octave, then yes. Or if you think of a guitar with capo as being a transposing instrument. Or a keyboard with a transpose button set, or just a toy piano with keys that run C-C but that happen to play some other notes because they weren't thinking about making it play with other instruments.

Consider a score for flute, b-clarinet, satb. Add chord symbols for guitar to top stave. Now top stave is silent for a while, and with 'hide empty staves' the chord symbols disappear.
Having a system property for chord symbols that result in them always being shown on top stave would solve this quite nicely and similar to segno

Why would you be adding chords for guitar to a flute staff? Worse, what if there was no flute - it was just clarinet and SATB? Or worse still, a clarinet choir? You'd want the chords at concert pitch even though attached to the clarinet staff - but this is precisely the opposite of what anyone else would want who was actually using the System flag for its intended purpose (making the text extract to all parts)! And speaking of parts, what would you like to happen when you extracted them? Really, you wouldn't want chords on *any* of the parts, except the non-existent guitar part. So the other players would be stuck with chords they don't want on their parts, and the guitar player would be forced to read directly from the score because there is not even a part for him. Not at all what anyone would want in this situation.

I would agree that this use case is one worth supporting someday, but the System flag isn't the way to do it. Because it's main purpose is to allow objects to be associated with *all* staves upon part extraction, it has the wrong semantics here. You don't want chords logically associated with all staves - you just want them displayed on the top of the score. Instead, what we could eventually support is a zero-line guitar part you can attach chords to directly. Meanwhile, a one-line guitar part would do the job - and have the added bonus of giving you a place to put strum rhythms, etc.

Another note on the same topic. Sibelius solved problem of parts not having the chord symbols by advising users to copy paste chords from the score to the parts that needs them. Currently, in MuseScore, that would also add the chord symbols to the parts... As far as I know we don't have any logic to "clone & link elements if added in score" and "don't clone and link element if added to parts". Right?

I want to add the guitar chords to a stave, don't care which one instead of having to add another full, but otherwise empty stave.
Look at all the song books out there, one stave with the melody and lyrics for the singer and the chord symbols for guitar on top.
Now add a piano, flute, b-trumpet or anything, as an interlude, where the singer is silent, and all of a sudden you have to switch where to attach the chord symbols to

lasconic: as far as I know you are correct that we don't distinguish between adding to score versus parts in that way. We'd need some sort of "break links" facility I guess. You are talking about a user putting chords on the top staff only (no system flag) and then manually copying to parts?

Jojo: yes, I do understand the use case. I'm just pointing out that even if implemented for chord symbols, the System flag would actually produce the wrong results. Chords would be transposed incorrectly and would appear inappropriately in parts.

That said, I do have a somewhat odd compromise solution that might work.

Given that I don't actually care about making the system flag work for chord symbols "for real" (meaning, propagated to all parts with proper per-staff transposition), we could just declare that the System flag for chord symbols should work differently from other elements. Instead of actually propagating to all parts, the System flag for chord symbols would actually *suppress* copying to parts - even the part for the staff to which the chord symbol is attached. This would allow the chords to be copied to parts as per Sibelius without worries that they then re-appear over those staves in the score. The System flag would still have the usual layout effect for chord symbols: they would appear above the top staff only. But they would be logically attached to whatever staff they are actually entered on and would transpose accordingly. Not sure how that last part would work in practice.

The better solution to my mind, though, is to allow zero-line staves, so you can have one of those in your score and attach your chords to that - no "System" flag needed. And then we could worry later about whether and how to implement System flag for chords "for real" (with full propagation and transposition).

It should not transpose, it still is just a chord for a guitar, no matter whether it is attached to a guita, a flute or a b-clarinet.
But a zero-line stave might be the better fix. Could possibly even have lyrics and chord symbols, but no notes (again, like in many songbooks, for Songs with widely know melodies)

Yes, I think the zero-line staff would be a better solution, and I'm sure could be useful for other things as well.

Regarding transposition: yes, I understand that in your particular use case, the chord is for guitar even though it is is being displayed about a clarinet staff. But for other cases where people would want System chords - cases where they really do want the chords propagated to all staves - they really would need the chords to transpose correctly for each staff. Earlier you asked about transposing instruments that played chords, and I may have mislead you into thinking that because few transposing instrumentsd can *play* chords, that they don't often use chord symbols. But this isn't true. Chord symbols are used all the time in parts for clarinets and other transposing instruments as guidelines for improvisation. The use case I have in mind is a big band arrangement where you want to give the chord progression for soloing to all the instruments - saxophones and trumpets included - but you don't want them to appear above all staves in the score. That is, the same reason you'd use any other System text. But in this use case, you'd definitely need the chord symbols to transpose.

Well, _System_ means just that, not Stave or Part. And the System has a keysig (which may be different from the transposing instruments used inside), so these System chords should transpose along with the System keysig.
In your use case just don't use the System property, these clearly belong to the stave/Instrument/part, whatever you want to call it. And yes, these should transpose along with the stave and propagate to the corresponding part

The regular English meaning of "System" might not say anything about parts, but that's definitely the usual/expected meaning in MuseScore. The *normal* use case for "system" text - not chord symbols, just ordinary text - is a user who wants text to appear on every part but *not* appear on every staff in the score. Eg, for tempo markings. It is vitally important to the normal function of "system" text that it be copied to all parts in this normal use case. So implementing "system chords" in the way you want is most definitely a *very* different interpretation of "system" than what is used elsewhere in MuseScore. it would require finding all the places where the system flag is checked, and special case chord symbols to work differently. Not impossible of course, but that's one reason I'm not excited by that approach at all.

Also, BTW, chords don't transpose according to key signatures, system or otherwise. They transpose according to the transposition parameter of the staff to which they are attached (eg, the staff specified by their "track" parameter). Even elements with the "system" property set have to be attached to some staff. Normally, I think this is forced to be the top staff (track == 0) even if the element is actually entered onto another staff. So this would be another place where we'd have to special case this for chord symbols.