From 84b9b6bc5f356b16e7df16854e517f3f92627011 Mon Sep 17 00:00:00 2001 From: Joachim Schmitz Date: Mon, 6 Dec 2021 17:03:59 +0100 Subject: [PATCH] Fix #306189: Extend Tremolo palette to allow for "Divide measured tremolo by [2-4.6]", `tremoloDivisiDots[2-4,6]`, implemented as articulations, actually even as staccatos, but (currently) without any playback effect on tremolos (as 'normal' staccatos don't work on those either). --- src/engraving/libmscore/articulation.cpp | 14 +++++++++++++- src/engraving/libmscore/symnames.cpp | 8 ++++---- .../musicxml/internal/musicxml/exportxml.cpp | 4 ++++ src/palette/internal/palettecreator.cpp | 13 +++++++++++++ tools/fonttools/smufl2sym-in-trans.json | 4 ++++ 5 files changed, 38 insertions(+), 5 deletions(-) diff --git a/src/engraving/libmscore/articulation.cpp b/src/engraving/libmscore/articulation.cpp index 0bc04639be470..0f692ff4cc518 100644 --- a/src/engraving/libmscore/articulation.cpp +++ b/src/engraving/libmscore/articulation.cpp @@ -436,6 +436,12 @@ Articulation::AnchorGroup Articulation::anchorGroup(SymId symId) case SymId::luteFingeringRHThird: return AnchorGroup::LUTE_FINGERING; + case SymId::tremoloDivisiDots2: + case SymId::tremoloDivisiDots3: + case SymId::tremoloDivisiDots4: + case SymId::tremoloDivisiDots6: + return AnchorGroup::ARTICULATION; + default: break; } @@ -459,6 +465,10 @@ const char* Articulation::symId2ArticulationName(SymId symId) case SymId::articStaccatoAbove: case SymId::articStaccatoBelow: + case SymId::tremoloDivisiDots2: + case SymId::tremoloDivisiDots3: + case SymId::tremoloDivisiDots4: + case SymId::tremoloDivisiDots6: return "staccato"; case SymId::articAccentStaccatoAbove: @@ -597,7 +607,9 @@ bool Articulation::isStaccato() const { return _symId == SymId::articStaccatoAbove || _symId == SymId::articStaccatoBelow || _symId == SymId::articMarcatoStaccatoAbove || _symId == SymId::articMarcatoStaccatoBelow - || _symId == SymId::articAccentStaccatoAbove || _symId == SymId::articAccentStaccatoBelow; + || _symId == SymId::articAccentStaccatoAbove || _symId == SymId::articAccentStaccatoBelow + || _symId == SymId::tremoloDivisiDots2 || _symId == SymId::tremoloDivisiDots3 + || _symId == SymId::tremoloDivisiDots4 || _symId == SymId::tremoloDivisiDots6; } bool Articulation::isAccent() const diff --git a/src/engraving/libmscore/symnames.cpp b/src/engraving/libmscore/symnames.cpp index 1d4290e0ebbff..eb1887e5eca98 100644 --- a/src/engraving/libmscore/symnames.cpp +++ b/src/engraving/libmscore/symnames.cpp @@ -5868,10 +5868,10 @@ constexpr const std::array SymNames::s_ "Combining tremolo 3", "Combining tremolo 4", "Combining tremolo 5", - "Divide measured tremolo by 2", - "Divide measured tremolo by 3", - "Divide measured tremolo by 4", - "Divide measured tremolo by 6", + QT_TRANSLATE_NOOP("symUserNames", "Divide measured tremolo by 2"), + QT_TRANSLATE_NOOP("symUserNames", "Divide measured tremolo by 3"), + QT_TRANSLATE_NOOP("symUserNames", "Divide measured tremolo by 4"), + QT_TRANSLATE_NOOP("symUserNames", "Divide measured tremolo by 6"), "Fingered tremolo 1", "Fingered tremolo 2", "Fingered tremolo 3", diff --git a/src/importexport/musicxml/internal/musicxml/exportxml.cpp b/src/importexport/musicxml/internal/musicxml/exportxml.cpp index 9add4696817e1..b1dcd08fb6ddc 100644 --- a/src/importexport/musicxml/internal/musicxml/exportxml.cpp +++ b/src/importexport/musicxml/internal/musicxml/exportxml.cpp @@ -2670,6 +2670,10 @@ static QString symIdToArtic(const SymId sid) case SymId::articAccentStaccatoBelow: case SymId::articMarcatoStaccatoAbove: case SymId::articMarcatoStaccatoBelow: + case SymId::tremoloDivisiDots2: + case SymId::tremoloDivisiDots3: + case SymId::tremoloDivisiDots4: + case SymId::tremoloDivisiDots6: return "staccato"; break; diff --git a/src/palette/internal/palettecreator.cpp b/src/palette/internal/palettecreator.cpp index e97369f09d06d..93818b162d4f8 100644 --- a/src/palette/internal/palettecreator.cpp +++ b/src/palette/internal/palettecreator.cpp @@ -515,6 +515,19 @@ PalettePtr PaletteCreator::newTremoloPalette() tremolo->setTremoloType(TremoloType(i)); sp->appendElement(tremolo, tremolo->subtypeName()); } + + static SymIdList dots { + SymId::tremoloDivisiDots2, + SymId::tremoloDivisiDots3, + SymId::tremoloDivisiDots4, + SymId::tremoloDivisiDots6 + }; + // include additional symbol-based fingerings (temporarily?) implemented as articulations + for (auto i : dots) { + auto s = Factory::makeArticulation(gpaletteScore->dummy()->chord()); + s->setSymId(i); + sp->appendElement(s, s->userName()); + } return sp; } diff --git a/tools/fonttools/smufl2sym-in-trans.json b/tools/fonttools/smufl2sym-in-trans.json index c391a95b6e34f..27244f4863f49 100644 --- a/tools/fonttools/smufl2sym-in-trans.json +++ b/tools/fonttools/smufl2sym-in-trans.json @@ -260,6 +260,10 @@ "chantCaesura": null, "coda": null, "codaSquare": null, + "tremoloDivisiDots2": null, + "tremoloDivisiDots3": null, + "tremoloDivisiDots4": null, + "tremoloDivisiDots6": null, "dynamicForte": null, "dynamicMezzo": null, "dynamicNiente": null,