diff --git a/importexport/musicxml/exportxml.cpp b/importexport/musicxml/exportxml.cpp index bcbf4979a4df..5599643c5d56 100644 --- a/importexport/musicxml/exportxml.cpp +++ b/importexport/musicxml/exportxml.cpp @@ -4774,15 +4774,16 @@ void ExportMusicXml::pedal(Pedal const* const pd, int staff, const Fraction& tic break; case HookType::NONE: if (pd->beginText() == "") { - pedalType = "resume"; + pedalType = pd->lineVisible() ? "resume" : "start"; break; } // FALLTHROUGH default: pedalType = "start"; } - signText = pd->beginText() == "" ? " sign=\"no\"" : " sign=\"yes\""; - signText += color2xml(pd); + signText = pd->beginText().isEmpty() ? " sign=\"no\"" : " sign=\"yes\""; + if (pd->beginText() == "keyboardPedalSost" || pd->beginText() == "keyboardPedalS") + pedalType = "sostenuto"; } else { if (!pd->endText().isEmpty() || pd->endHookType() == HookType::HOOK_90) @@ -4791,11 +4792,12 @@ void ExportMusicXml::pedal(Pedal const* const pd, int staff, const Fraction& tic pedalType = "discontinue"; // "change" type is handled only on the beginning of pedal lines - signText = pd->endText() == "" ? " sign=\"no\"" : " sign=\"yes\""; + signText = pd->endText().isEmpty() ? " sign=\"no\"" : " sign=\"yes\""; } QString pedalXml = QString("pedal type=\"%1\"").arg(pedalType); pedalXml += lineText; pedalXml += signText; + pedalXml += color2xml(pd); pedalXml += positioningAttributes(pd, pd->tick() == tick); _xml.tagE(pedalXml); _xml.etag(); diff --git a/importexport/musicxml/importmxmlpass2.cpp b/importexport/musicxml/importmxmlpass2.cpp index e05782446da1..dc9c825e4487 100644 --- a/importexport/musicxml/importmxmlpass2.cpp +++ b/importexport/musicxml/importmxmlpass2.cpp @@ -4150,7 +4150,7 @@ void MusicXMLParserDirection::pedal(const QString& type, const int /* number */, sign = "no"; // MusicXML 2.0 compatibility } auto& spdesc = _pass2.getSpanner({ ElementType::PEDAL, number }); - if (type == "start" || type == "resume") { + if (type == "start" || type == "resume" || type == "sostenuto") { if (spdesc._isStarted && !spdesc._isStopped) { // Previous pedal unterminated—likely an unrecorded "discontinue", so delete the line. // TODO: if "change", create 0-length spanner rather than delete @@ -4165,9 +4165,16 @@ void MusicXMLParserDirection::pedal(const QString& type, const int /* number */, if (!p->lineVisible() || sign == "yes") { p->setBeginText("keyboardPedalPed"); p->setContinueText("(keyboardPedalPed)"); + if (type == "sostenuto") { + p->setBeginText("keyboardPedalSost"); + p->setContinueText("(keyboardPedalSost)"); + } } - else + else { + p->setBeginText(""); + p->setContinueText(""); p->setBeginHookType(type == "resume" ? HookType::NONE : HookType::HOOK_90); + } p->setEndHookType(HookType::NONE); if (color.isValid()/* && preferences.getBool(PREF_IMPORT_MUSICXML_IMPORTLAYOUT)*/) @@ -4212,6 +4219,10 @@ void MusicXMLParserDirection::pedal(const QString& type, const int /* number */, if (color.isValid()/* && preferences.getBool(PREF_IMPORT_MUSICXML_IMPORTLAYOUT)*/) p->setLineColor(color); + if (sign == "no") { + p->setBeginText(""); + p->setContinueText(""); + } starts.append(MusicXmlSpannerDesc(p, ElementType::PEDAL, number)); } else if (type == "continue") { diff --git a/mtest/musicxml/io/testColorExport_ref.xml b/mtest/musicxml/io/testColorExport_ref.xml index d09a5012c17a..2d4c28ad48d0 100644 --- a/mtest/musicxml/io/testColorExport_ref.xml +++ b/mtest/musicxml/io/testColorExport_ref.xml @@ -261,7 +261,7 @@ - + @@ -421,7 +421,7 @@ - + diff --git a/mtest/musicxml/io/testDirections1.xml b/mtest/musicxml/io/testDirections1.xml index 2a7bc841db1d..c3301d44606c 100644 --- a/mtest/musicxml/io/testDirections1.xml +++ b/mtest/musicxml/io/testDirections1.xml @@ -102,7 +102,7 @@ - + @@ -132,7 +132,7 @@ - + diff --git a/mtest/musicxml/io/testPedalChanges.xml b/mtest/musicxml/io/testPedalChanges.xml index c127f52599a5..a64a996bdb94 100644 --- a/mtest/musicxml/io/testPedalChanges.xml +++ b/mtest/musicxml/io/testPedalChanges.xml @@ -1,6 +1,6 @@ - - + + Pedal Changes @@ -16,46 +16,7 @@ - - - 7 - 40 - - - 1697.14 - 1200 - - 85.7143 - 85.7143 - 85.7143 - 85.7143 - - - 85.7143 - 85.7143 - 85.7143 - 85.7143 - - - - - - - title - Pedal Changes - - - subtitle - MuseScore Testcase - - - composer - Henry Ives - - - none - Piano Pno. @@ -70,42 +31,29 @@ 0 - - - - - - 50.00 - 0.00 - - 170.00 - - - 65.00 - - + 1 - + 0 - 2 - + G 2 - - F - 4 - - + + + + + + C 4 @@ -114,9 +62,8 @@ 1 quarter up - 1 - + D 4 @@ -125,9 +72,8 @@ 1 quarter up - 1 - + E 4 @@ -136,9 +82,8 @@ 1 quarter up - 1 - + F 4 @@ -147,61 +92,15 @@ 1 quarter up - 1 - - 4 - - - - 2 - - - - A - 2 - - 4 - 5 - whole - 2 - - - 4 - - - - F - 3 - - 2 - 6 - half - down - 2 - - - - + - 2 - - - G - 3 - - 2 - 6 - half - down - 2 - - - + + G 4 @@ -210,9 +109,8 @@ 1 quarter up - 1 - + A 4 @@ -221,9 +119,13 @@ 1 quarter up - 1 - + + + + + + B 4 @@ -232,9 +134,8 @@ 1 quarter down - 1 - + C 5 @@ -243,61 +144,15 @@ 1 quarter down - 1 - - - 4 - - - - D - 3 - - 4 - 5 - whole - 2 - - - 4 - - - - A - 3 - - 2 - 6 - half - down - 2 - - - - - - 2 - - - - B - 3 - - 2 - 6 - half - down - 2 - 2 - - + + D 5 @@ -306,9 +161,8 @@ 1 quarter down - 1 - + E 5 @@ -317,9 +171,8 @@ 1 quarter down - 1 - + F 5 @@ -328,9 +181,8 @@ 1 quarter down - 1 - + G 5 @@ -339,30 +191,15 @@ 1 quarter down - 1 - - - 4 - - - - C - 3 - - 4 - 5 - whole - 2 - + - + - 2 - + A 5 @@ -371,9 +208,8 @@ 1 quarter down - 1 - + B 5 @@ -382,15 +218,13 @@ 1 quarter down - 1 - + - 2 - + A 5 @@ -399,9 +233,8 @@ 1 quarter down - 1 - + G 5 @@ -410,24 +243,15 @@ 1 quarter down - 1 - - - 4 - - - - B - 2 - - 4 - 5 - whole - 2 - - + + + + + + + F 5 @@ -436,9 +260,8 @@ 1 quarter down - 1 - + E 5 @@ -447,9 +270,8 @@ 1 quarter down - 1 - + D 5 @@ -458,9 +280,8 @@ 1 quarter down - 1 - + C 5 @@ -469,36 +290,15 @@ 1 quarter down - 1 - - - 4 - - - - - - 2 - - - - A - 2 - - 4 - 5 - whole - 2 - 2 - - + + B 4 @@ -507,9 +307,8 @@ 1 quarter down - 1 - + A 4 @@ -518,9 +317,8 @@ 1 quarter up - 1 - + G 4 @@ -529,9 +327,8 @@ 1 quarter up - 1 - + F 4 @@ -540,57 +337,44 @@ 1 quarter up - 1 - - - 4 - - - - A - 3 - - 4 - 5 - whole - 2 - - + + + + + + + E 4 - 4 + 1 1 - whole - 1 + quarter + up - - 4 - - - - - - 2 - - + - G - 3 + D + 4 - 4 - 5 - whole - 2 + 1 + 1 + quarter + up + + + + 2 + 1 + half - 2 light-heavy diff --git a/mtest/musicxml/io/testPedalChanges_ref.mscx b/mtest/musicxml/io/testPedalChanges_ref.mscx deleted file mode 100644 index 293a159bf1cb..000000000000 --- a/mtest/musicxml/io/testPedalChanges_ref.mscx +++ /dev/null @@ -1,641 +0,0 @@ - - - - - 0 - 480 - - 1 - 1 - 1 - 0 - - Henry Ives - - - - - - - - - Pedal Changes - - - - stdNormal - - 3 - - 1 - - - - stdNormal - - 3 - - Piano - - Piano - Pno. - Piano - 21 - 108 - 21 - 108 - keyboard.piano - F - - 100 - 95 - - - 100 - 33 - - - 100 - 50 - - - 100 - 67 - - - 100 - 100 - - - 120 - 67 - - - 150 - 100 - - - 150 - 50 - - - 120 - 50 - - - 120 - 100 - - - - - - - - - - 12.5 - - - - Pedal Changes - - - - - MuseScore Testcase - - - - right,top - - Henry Ives - - - - - - G - G - - - 4 - 4 - - - quarter - up - - 60 - 14 - - - - quarter - up - - 62 - 16 - - - - quarter - up - - 64 - 18 - - - - quarter - up - - 65 - 13 - - - - - - - - quarter - up - - 67 - 15 - - - - quarter - up - - 69 - 17 - - - - quarter - down - - 71 - 19 - - - - quarter - down - - 72 - 14 - - - - - - - - quarter - down - - 74 - 16 - - - - quarter - down - - 76 - 18 - - - - quarter - down - - 77 - 13 - - - - quarter - down - - 79 - 15 - - - - - - - - quarter - down - - 81 - 17 - - - - quarter - down - - 83 - 19 - - - - quarter - down - - 81 - 17 - - - - - - 1 - -3/4 - - - - - quarter - down - - 79 - 15 - - - - - - - - quarter - down - - 77 - 13 - - - - - - 1 - -1 - 1/4 - - - - - quarter - down - - 76 - 18 - - - - quarter - down - - 74 - 16 - - - - quarter - down - - 72 - 14 - - - - - - - - quarter - down - - 71 - 19 - - - - quarter - up - - 69 - 17 - - - - quarter - up - - 67 - 15 - - - - quarter - up - - 65 - 13 - - - - - - - - whole - - 64 - 18 - - - - end - - - - - - - - - F - F - - - 4 - 4 - - - - 1 - <sym>keyboardPedalPed</sym> - (<sym>keyboardPedalPed</sym>) - - - - 1/2 - - - - - whole - - 45 - 17 - - - - -1/2 - - - - - -1/2 - - - - - - - half - down - - 53 - 13 - - - - half - down - - 55 - 15 - - - - - - - - whole - - 50 - 16 - - - - -1/2 - - - - 1 - <sym>keyboardPedalPed</sym> - (<sym>keyboardPedalPed</sym>) - - - - 1 - -1/2 - - - - - - - half - down - - 57 - 17 - - - - half - down - - 59 - 19 - - - - - - - - - - -1 - 1/2 - - - - - whole - - 48 - 14 - - - - - - - - - 2 - <sym>keyboardPedalPed</sym> - (<sym>keyboardPedalPed</sym>) - - - - -1 - 3/4 - - - - - whole - - 47 - 19 - - - - -1/2 - - - - 2 - 2 - - - - -1 - 1 - -1/4 - - - - - - - - - - 1 - 2 - - - - 1 - - - - - whole - - 45 - 17 - - - - - - - - - - -1 - - - - - whole - - 57 - 17 - - - - - - - - - 1 - <sym>keyboardPedalPed</sym> - (<sym>keyboardPedalPed</sym>) - - - - 1/1 - - - - - whole - - 55 - 15 - - - - end - - - - - -1/1 - - - - - - - - diff --git a/mtest/musicxml/io/testPedalStyles.xml b/mtest/musicxml/io/testPedalStyles.xml new file mode 100644 index 000000000000..8229763ae801 --- /dev/null +++ b/mtest/musicxml/io/testPedalStyles.xml @@ -0,0 +1,1555 @@ + + + + + Pedal styles test + + + K. Rettinghaus + + MuseScore 0.7.0 + 2007-09-10 + + + + + + + + + + Piano + Pno. + + Piano + + + + 1 + 1 + 78.7402 + 0 + + + + + + + 1 + + 0 + + + 2 + + G + 2 + + + F + 4 + + + + + 1 + 1 + quarter + 1 + + + + A + 4 + + 1 + 1 + quarter + down + 1 + + + + + + + + + + C + 5 + + 1 + 1 + quarter + down + 1 + + + + + F + 5 + + 1 + 1 + quarter + down + 1 + + + + A + 4 + + 1 + 1 + quarter + down + 1 + + + + + + + + + + C + 5 + + 1 + 1 + quarter + down + 1 + + + + + F + 5 + + 1 + 1 + quarter + down + 1 + + + 3 + + + + + + 2 + + + + C + 2 + + 1 + 5 + quarter + up + 2 + + + + A + 3 + + 1 + 5 + quarter + down + 2 + + + + + + + + + + C + 4 + + 1 + 5 + quarter + down + 2 + + + + + F + 4 + + 1 + 5 + quarter + down + 2 + + + + A + 3 + + 1 + 5 + quarter + down + 2 + + + + + + + + + + C + 4 + + 1 + 5 + quarter + down + 2 + + + + + F + 4 + + 1 + 5 + quarter + down + 2 + + + + + + G + 4 + + 1 + 1 + quarter + down + 1 + + + + + + + + + + C + 5 + + 1 + 1 + quarter + down + 1 + + + + + E + 5 + + 1 + 1 + quarter + down + 1 + + + + G + 4 + + 1 + 1 + quarter + down + 1 + + + + + + + + + + C + 5 + + 1 + 1 + quarter + down + 1 + + + + + E + 5 + + 1 + 1 + quarter + down + 1 + + + + 1 + 1 + quarter + 1 + + + 3 + + + + G + 3 + + 1 + 5 + quarter + down + 2 + + + + + + + + + + C + 4 + + 1 + 5 + quarter + down + 2 + + + + + E + 4 + + 1 + 5 + quarter + down + 2 + + + + G + 3 + + 1 + 5 + quarter + down + 2 + + + + + + + + + + C + 4 + + 1 + 5 + quarter + down + 2 + + + + + E + 4 + + 1 + 5 + quarter + down + 2 + + + + 1 + 5 + quarter + 2 + + + + + + 2 + + + + + + 1 + 1 + quarter + 1 + + + + A + 4 + + 1 + 1 + quarter + down + 1 + + + + + + + + + + C + 5 + + 1 + 1 + quarter + down + 1 + + + + + F + 5 + + 1 + 1 + quarter + down + 1 + + + + A + 4 + + 1 + 1 + quarter + down + 1 + + + + + + + + + + C + 5 + + 1 + 1 + quarter + down + 1 + + + + + F + 5 + + 1 + 1 + quarter + down + 1 + + + 3 + + + + + + 2 + + + + C + 2 + + 1 + 5 + quarter + up + 2 + + + + A + 3 + + 1 + 5 + quarter + down + 2 + + + + + + + + + + C + 4 + + 1 + 5 + quarter + down + 2 + + + + + F + 4 + + 1 + 5 + quarter + down + 2 + + + + A + 3 + + 1 + 5 + quarter + down + 2 + + + + + + + + + + C + 4 + + 1 + 5 + quarter + down + 2 + + + + + F + 4 + + 1 + 5 + quarter + down + 2 + + + + + + G + 4 + + 1 + 1 + quarter + down + 1 + + + + + + + + + + C + 5 + + 1 + 1 + quarter + down + 1 + + + + + E + 5 + + 1 + 1 + quarter + down + 1 + + + + G + 4 + + 1 + 1 + quarter + down + 1 + + + + + + + + + + C + 5 + + 1 + 1 + quarter + down + 1 + + + + + E + 5 + + 1 + 1 + quarter + down + 1 + + + + 1 + 1 + quarter + 1 + + + 3 + + + + G + 3 + + 1 + 5 + quarter + down + 2 + + + + + + + + + + C + 4 + + 1 + 5 + quarter + down + 2 + + + + + E + 4 + + 1 + 5 + quarter + down + 2 + + + + G + 3 + + 1 + 5 + quarter + down + 2 + + + + + + + + + + C + 4 + + 1 + 5 + quarter + down + 2 + + + + + E + 4 + + 1 + 5 + quarter + down + 2 + + + + 1 + 5 + quarter + 2 + + + + + + 2 + + + + + + 1 + 1 + quarter + 1 + + + + A + 4 + + 1 + 1 + quarter + down + 1 + + + + + + + + + + C + 5 + + 1 + 1 + quarter + down + 1 + + + + + F + 5 + + 1 + 1 + quarter + down + 1 + + + + A + 4 + + 1 + 1 + quarter + down + 1 + + + + + + + + + + C + 5 + + 1 + 1 + quarter + down + 1 + + + + + F + 5 + + 1 + 1 + quarter + down + 1 + + + 3 + + + + + + 2 + + + + C + 2 + + 1 + 5 + quarter + up + 2 + + + + A + 3 + + 1 + 5 + quarter + down + 2 + + + + + + + + + + C + 4 + + 1 + 5 + quarter + down + 2 + + + + + F + 4 + + 1 + 5 + quarter + down + 2 + + + + A + 3 + + 1 + 5 + quarter + down + 2 + + + + + + + + + + C + 4 + + 1 + 5 + quarter + down + 2 + + + + + F + 4 + + 1 + 5 + quarter + down + 2 + + + + + + G + 4 + + 1 + 1 + quarter + down + 1 + + + + + + + + + + C + 5 + + 1 + 1 + quarter + down + 1 + + + + + E + 5 + + 1 + 1 + quarter + down + 1 + + + + G + 4 + + 1 + 1 + quarter + down + 1 + + + + + + + + + + C + 5 + + 1 + 1 + quarter + down + 1 + + + + + E + 5 + + 1 + 1 + quarter + down + 1 + + + + 1 + 1 + quarter + 1 + + + 3 + + + + G + 3 + + 1 + 5 + quarter + down + 2 + + + + + + + + + + C + 4 + + 1 + 5 + quarter + down + 2 + + + + + E + 4 + + 1 + 5 + quarter + down + 2 + + + + G + 3 + + 1 + 5 + quarter + down + 2 + + + + + + + + + + C + 4 + + 1 + 5 + quarter + down + 2 + + + + + E + 4 + + 1 + 5 + quarter + down + 2 + + + + 1 + 5 + quarter + 2 + + + + + + 2 + + + + + + 1 + 1 + quarter + 1 + + + + A + 4 + + 1 + 1 + quarter + down + 1 + + + + + + + + + + C + 5 + + 1 + 1 + quarter + down + 1 + + + + + F + 5 + + 1 + 1 + quarter + down + 1 + + + + A + 4 + + 1 + 1 + quarter + down + 1 + + + + + + + + + + C + 5 + + 1 + 1 + quarter + down + 1 + + + + + F + 5 + + 1 + 1 + quarter + down + 1 + + + 3 + + + + + + 2 + + + + C + 2 + + 1 + 5 + quarter + up + 2 + + + + A + 3 + + 1 + 5 + quarter + down + 2 + + + + + + + + + + C + 4 + + 1 + 5 + quarter + down + 2 + + + + + F + 4 + + 1 + 5 + quarter + down + 2 + + + + A + 3 + + 1 + 5 + quarter + down + 2 + + + + + + + + + + C + 4 + + 1 + 5 + quarter + down + 2 + + + + + F + 4 + + 1 + 5 + quarter + down + 2 + + + + + + G + 4 + + 1 + 1 + quarter + down + 1 + + + + + + + + + + C + 5 + + 1 + 1 + quarter + down + 1 + + + + + E + 5 + + 1 + 1 + quarter + down + 1 + + + + G + 4 + + 1 + 1 + quarter + down + 1 + + + + + + + + + + C + 5 + + 1 + 1 + quarter + down + 1 + + + + + E + 5 + + 1 + 1 + quarter + down + 1 + + + + 1 + 1 + quarter + 1 + + + 3 + + + + G + 3 + + 1 + 5 + quarter + down + 2 + + + + + + + + + + C + 4 + + 1 + 5 + quarter + down + 2 + + + + + E + 4 + + 1 + 5 + quarter + down + 2 + + + + G + 3 + + 1 + 5 + quarter + down + 2 + + + + + + + + + + C + 4 + + 1 + 5 + quarter + down + 2 + + + + + E + 4 + + 1 + 5 + quarter + down + 2 + + + + 1 + 5 + quarter + 2 + + + + + + 2 + + + light-heavy + + + + diff --git a/mtest/musicxml/io/tst_mxml_io.cpp b/mtest/musicxml/io/tst_mxml_io.cpp index 4bfaca5dff89..73c7d9f5d759 100644 --- a/mtest/musicxml/io/tst_mxml_io.cpp +++ b/mtest/musicxml/io/tst_mxml_io.cpp @@ -215,8 +215,9 @@ private slots: void numberedLyrics() { mxmlIoTestRef("testNumberedLyrics"); } void overlappingSpanners() { mxmlIoTest("testOverlappingSpanners"); } void partNames() { mxmlImportTestRef("testPartNames"); } - void pedalChanges() { mxmlImportTestRef("testPedalChanges"); } + void pedalChanges() { mxmlIoTest("testPedalChanges"); } void pedalChangesBroken() { mxmlImportTestRef("testPedalChangesBroken"); } + void pedalStyles() { mxmlIoTest("testPedalStyles"); } void placementDefaults() { mxmlImportTestRef("testPlacementDefaults"); } void printSpacingNo() { mxmlIoTestRef("testPrintSpacingNo"); } void repeatCounts() { mxmlIoTest("testRepeatCounts"); }