Chord symbol playback enabled for one user not enabled by another

• Jun 20, 2020 - 16:27
Reported version
3.x-dev
Priority
P0 - Critical
Type
Functional
Frequency
Once
Severity
S3 - Major
Reproducibility
Always
Status
closed
Regression
No
Workaround
No
Project

Because chord symbol playback is currently tied (among other things) to a program preference, this means a user may enable it, heard playback the way he wants, then share his score with another - or on musescore.com, once its back end is updated - and the playback won't be heard. Conversely, one user might have it disabled and implement his own playback for chords, then share the score with others who will suddenly start hearing the builtin playback too. So, I think we need to reconsider whether there should be a program-wide preference for this. One can already control playback of chord symbols by toggling the Play property (and optionally using "Set as style").

On top of that, I think having chord symbol playback disabled by default means the feature will remain undiscovered by many, which is unfortunate. I'd rather have people wonder how to turn it it off than not know it exists at all.

To me, this is an issue we need to solve before release. I've held off on saying too much about this so far as I was hoping for more feedback on forums etc and didn't want to bias things too much with my own opinions. But I guess it's time now.

That's a description of the problem. I have some ideas on solutions, but I'll discuss those separately in the comments.


Comments

Originally it was assumed we would not want chord symbol playback enabled by default for existing scores, as it would represent a change. I could actually go either way on that personally, but for the sake of argument let's take that as a given: chord symbol playback should be disabled by default for old scores, enabled for new ones. And we want to do this without a file format version bump of course.

One hacky way of doing this would be to play games with the style default based on the "mscoreVersion()" of the score (different from the conversion. That would probably work, but I'm not going to go there right now because I think I have a better idea.

A somewhat better option I proposed earlier would be to instead tie this to the harmony channel in the mixer. This is generated on the fly as needed. What we could do is have it default to muted, unless there is a tag in the file saying "don't mute harmony channel by default". Older files would not have this tag of course. The tag could be embedded in the instruments.xml file so that new scores pick it up automatically. For older files, to enable playback, you'd go to the mixer and explicitly unmute the harmony channel. For new ones, to disable it, you could do the same but explicitly mute. Or, use the Play property / style setting.

But, somehow it seems wrong that older files would have Play property / style setting enabled and yet you don't hear playback. The Play property is, after all, where I think most people would go first to control this. I think people would not immediately discover the harmony channel in the mixer. Plus, I don't really love the idea of old vs new as the differentiator here. So I would now like to propose another alternative.

If we decide it's OK for older scores to play chords symbols by default, we could simply remove the program preference, and let people manage playback using the style setting (which would continue to default to true but can be made false as part of a custom template or your own house style MSS file for new scores). This is the really easy solution. We simply remove the preference from the GUI and any place in the code where we check it, this becomes the equivalent of "if (true)", no other changes required, and I think it's probably fine really.

Or, if we wish to continue to have older scores not play chord symbols by default, we could have the Play style setting technically default to false, but have the "create new score" operation explicitly set it to true. We could even keep the existing program preference, but have it control now playback as a whole, but simply which way the Play style default goes for newly created scores.

I have no real preference between those last few of options:

1) remove the preference entirely so chord symbol is controlled by the Play style setting only for all score old and new
2a) remove the preference entirely, have Play style disabled by default, but have act of creating a score force it on
2b) keep the preference but default it to on, have chord symbol disabled by default, have the act of creating a score look at the program preference to set Play style

I am happy to implement whichever of these people feel is best.

My preference is option 1.
Yes, the behavior has changed but it is obvious and easy to "correct" if you really don't want hear the chords.
A possible problem can be when users decide command line options to convert a score to midi/mp3 (or any sound format), in that case the changed behavior can pass unnoticed.

Good point about command line conversion. I suppose the existing preference could be repurposed for that case alone, but not sure that's really expected either.

I would expect the command-line sound output to be consistent with the GUI sound output. I imagine that a typical workflow would be to test how one or two score files sound using the GUI and then batch-convert using the command line. If there were a difference between the two in the same version of MuseScore, it would be worse than there being a difference between the current MuseScore version and the previous one. (In other words, breaking changes are less unexpected across application versions than they are within the same application when run in different UI modes.)

My opinion :
Off for exisiting scores, on for new ones.
Having it on for existing ones would.be too surprising and possibly disrupting and potentially with a bad choice of sound. Also difficult to handle for less advanded users that just want to use it for reheasal.
In new ones this won't be the case, and.the feature would get noticed too.

I'm a little hesitant to pick either 1 or 2a. However, I feel 1 is cleaner and if people don't like it, we can always improve the interface options. The new inspector should be able to help a lot with this - although that's obviously not going to happen in 3.5.

And also see https://github.com/musescore/MuseScore/pull/6259, which implements the equivalent of 2a). The style actually defaults to on still, but the act of loading a pre=3.5 score forces it to off. That's on top of see https://github.com/musescore/MuseScore/pull/6247, which simply eliminates the preference to resolve the actual issue at hand - making sure that two people listening to the same score (or listening locally versus on musescore.com) hear the same thing.

Status PR created fixed

Fixed in branch 3.x, commit 8a7bc001cf

_fix #307005: chord playback default not consistent

Resolves: https://musescore.org/en/node/307005

Currently chord symbols playback is off by default
controlled by a global program preference.
This means a given user has to learn the feature exists before using it,
which is not how we handle playback of dynamics, ornaments, etc.
And worse, it means a user might turn it on, hear the chord playback,
save and share a score that relies on it,
but the people he sahres it with (including musescore.com)
will not hear the chords unless they happen to have enabled the option.
And musescore.com won't play it no matter what
(or else, it will always play chords symbols for everyone,
which isn't good either).

This commit removes the preference and enables chord sytmbol playback
according to the style setting and property on the chord symbol itself,
which is exactly how it is done for ornaments etc.
The style setting and property already existed,
they were just being overridden by the program preference._

Status active fixed

Fixed in branch 3.5rc, commit fb3c202c0a

_fix #307005: chord playback default not consistent

Resolves: https://musescore.org/en/node/307005

Currently chord symbols playback is off by default
controlled by a global program preference.
This means a given user has to learn the feature exists before using it,
which is not how we handle playback of dynamics, ornaments, etc.
And worse, it means a user might turn it on, hear the chord playback,
save and share a score that relies on it,
but the people he sahres it with (including musescore.com)
will not hear the chords unless they happen to have enabled the option.
And musescore.com won't play it no matter what
(or else, it will always play chords symbols for everyone,
which isn't good either).

This commit removes the preference and enables chord sytmbol playback
according to the style setting and property on the chord symbol itself,
which is exactly how it is done for ornaments etc.
The style setting and property already existed,
they were just being overridden by the program preference._

Fix version
3.5.0