musescore / MuseScore

MuseScore is an open source and free music notation software. For support, contribution, bug reports, visit MuseScore.org. Fork and make pull requests!
https://musescore.org
Other
12.1k stars 2.62k forks source link

Ability to override default articulation profiles #23891

Open wizofaus opened 1 month ago

wizofaus commented 1 month ago

Your idea

When playing back through the Fluid Sequencer (for MS Basic/sound fonts), I'd like to be able to override the default sustained durations etc. for various articulations without having to recompile the software.

Problem to be solved

Currently the articulation profiles for the various instrument families are baked in at compile time, and while it's relatively easy to change them and recompile, for an average user this seems an unnecessary step (given compiling the source code requires quite a lengthy setup process).
In particular the default duration for non-legato "standard" notes is 99% for many instrument families (strings/winds etc.), which isn't really enough to give the impression of non-legato playback except when the notes are very very long. 95% works better for notes of a more typical length.

Prior art

In MS 3.6 this could be done by editing the .mscx files.

Additional context

DEFAULT_ARTICULATION_PROFILES is defined for each instrument family as pointing to a compiled-in "QFile" resource address, e.g. ":/mpe/general_string_articulations_profile.json", so the only way of modifying the profiles is to modify the json file in the source and recompile. You can even use the articulation profile editor (under DevTools | MPE) for this, but again, it appears there's no way to request the profiles to be used unless you overwrite the existing json files and recompile.

Example of a score where I've changed the durations for "standard" vs "legato" to give desired playback: https://musescore.com/user/7209246/scores/20010427/s/8UPdf3

Note that these profiles have no effect currently when using Muse Sounds (even when using the "classic phrasing" sound flag). This is because in musesamplersequencer.cpp (line 379 in latest source as of writing) it sends the nominal duration, rather the actual duration. Changing this actually allows use of articulation fine-tuning via Muse Sounds, nicely distinguishing legato and non-legato playback, as per https://musescore.com/user/7209246/scores/20014687/s/vjgpvP

Checklist

LucySuccubus commented 1 month ago

This, in some way, is a means to address #15099 directly on Musescore's end.