Chord symbol playback: better defaults

• Mar 22, 2020 - 16:20
Reported version
3.x-dev
Type
Functional
Frequency
Once
Severity
S3 - Major
Reproducibility
Always
Status
PR created
Regression
Yes
Workaround
Yes
Project

Chord symbols playing back by default makes existing scores sound different after that feature vs. before it.

Possible workarounds (and solutions):

  • Disable the "Play" property for chord symbols in Inspector (by default, maybe only for old scores, not for ones created with the new MuseScore version)
  • Mute the 'harmony' channel in Mixer (by default)
  • Disable Preferences > Note Input > Play chord symbols (by default)
  • Make the above "Play chord symbols" a per score setting

Comments

Actually, they don't play back "by default", you need to turn on a Edit / Preferences / Note Input / Play Harmony. But I'd personally rather that not be needed - I'm not comfortable with a given score playing back differently on different systems for no good obvious reason. On the other hand, I do agree existing scores should not have their playback affected.

So to me, the solution is to eliminate the preference (or at least have it default to true, maybe hide it in Advanced to make people less likely to mess with it), but have the style setting default to false. At least for existing scores. New scores could arguably get it set to true, although there is no "clean" way to make a style default differ for old vs new scores (without a format version change, anyhow). There are, however, some hacky solutions I would not object to.

Muting the harmony channel is an interesting thought. This channel is managed automatically, created on the fly when chord symbols are present. Right now I can't think of a good way to get the effect of muting for existing scores, not for new scores. Unless, hmm, maybe we modify instruments.xml to add some new global tag to control the muting of the harmony channel? So existing scores would lack that tag, new scores would get it. Yes, maybe that's the best solution.

BTW, the style setting for play harmony is currently not exposed in Format / Style / Chord Symbols, but should be. Right now it's only controlled by "Set as style" in the Inspector.

Title Chord symbol playback: chord symbols play back by default Chord symbol playback: better defaults

Title was misleading, they are actually off by default (and I agree they should stay that way at least for existing scores).

Well, the global setting may be off by default, but there is none for the scores themselves, so no way to leave it off for existing scores, but on for new ones.

Exactly. That’s why I like your channel idea. If you could add a line to instruments.xml. If we can add a global tag muting the channel by default, that would solve the implementation issue. Then it would be a matter of how to make it easy to discover how to enable it. Maybe add new “Piano (with chord symbol playback)” instruments that explicitly enable it? Certainly the jazz templates could enable it by default. Not sure, will be good to get user feedback during a beta.

instruments.xml is only ever used for new scores, so won't help changing the default for old ones

Unless we change the default for old ones at the same time that is, make sure that entry in instruments.xml enables it for new ones and change all the templates we want chord symbol playback for by default.

Sound is another issue, for a vocal staff with chord symbols I certainly don't want 'choir aahs' singing the chord, but either piano or guitar or maybe organ, depending on genre. Piano being the save bet I guess.
Yet another is rhythm, would be nice to have the chords play as per 'rhythmic slash notation'

Right, I think misspoke in my previous response. It's actually that instruments.xml should enable the chord symbol channel, but "default" it would be muted. So only scores created with the new instruments.xml would have it enabled by default. That then solves the problem of how to expose this - we don't need to. Not sure what I was thinking this morning, I knew the idea originally made more sense than what was coming out.

And yes, choosing an appropriate playback sound for this channel came up in chat, and this is actually the perfect way to address that too. What if, the chord symbol channel was muted by default as far as the code is concerned, but there were global tags in the instruments.xml that both unmuted it and set the sound for that channel to a reasonable default (eg, piano or guitar)? Like:

<chordSymbolChannel>
<mute>0</mute>
<program>0</program>
</chordSymbolChannel>

or something like that, where mute defaults to 1, and like articulations, you can override this on an instrument basis, so guitar instruments could be set to default the sound to themselves.

The chords generated for playback are not possible on the guitar at all. So, IMV, the Piano is the obvious default instrument.

As far as I can all but C and D chords are playable on Guitar (at least the pitches are available). But yes, having that octave below root an octave higher might be better for Guitar.
Or having the instrument's range being taken into consideration for the realization.
Still wouldn't be the 'standard' guitar chord fingering though.

The playback makes no assumption about what the instrument is, or indeed that it’s only one instrument. You could think of it as bass + guitar if you like. Or a string section. Or piano, or whatever.

To me, defaulting to same instrument is as good as anything given it’s easier enough to override, but if we have to pick a single other instrument to use, piano makes the most sense I think.

Much more important is to figure out how to avoid needing to is a preference.

Ok, seems there is more to it: chord symbol playback is ok if seen as gultar and bass or as piano, but chord realization is not, as it is isn't realizationable given the instrument.

I don't see the distinction. Whether wer'e talking real-time playback or realizing the chord so you can then edit it, the same principle apply: we aren't trying to second guess what instrument or instruments you might want to play for, we are simply creating good voicings you can do as you want with.

For the record, the preference is gone now, we realized it led to inconsistent results between one user and another for the same score, or between your local system and musescore.com. So it needs to be controlled by score properties only - the style setting and/or harmony channel.

Regarding compatibility, after much discussion, we have tentatively decided to simply use piano as the default playback sound, but keep it enabled for older scores. Too much hackery involved in trying to have different behavior for 3.0-3.4.2 scores versus 3.5 scores, and too much missed opportunity by not allow lead sheets created within the past year and a half to play chords automatically.

Having playback sound as piano should lessen concerns about it being too surprising to suddenly hear chord symbols playback, and in any case, turning off playback is now a matter of unchecking Play in the Inspector and hitting set as style. Or muting the harmony channel if you prefer. But the Inspector is the same as you'd use for ornaments etc, so it feels consistent.

So, here's the PR to set the default sound to piano : https://github.com/musescore/MuseScore/pull/6268

With the previous change to remove the preference (see #307005: Chord symbol playback enabled for one user not enabled by another) and this, I would like to consider this particular closed. It was probably too general to begin with, If there are further changes people would like to request - like making guitar instruments & templates default to guitar for chord symbol playback, which is reasonable if not exactly a no-brainer (I can see arguments against this too) - let's do that in separate issues.