From 347111428bd4bf4160f689a6c24e63fb4ae10601 Mon Sep 17 00:00:00 2001 From: iveshenry18 Date: Mon, 5 Jul 2021 17:39:20 -0600 Subject: [PATCH] ENG-57: Remove preliminary chord charts Some PVG scores begin with a list of all chord charts for the piece. These usually translate incorrectly to MusicXML; therefore, this commit adds code to detect and remove these. In porting to master, perhaps this code can be controlled with an import setting. --- importexport/musicxml/importmxmlpass2.cpp | 54 + .../io/testExcessiveFretDiagrams1.xml | 998 ++++++++++++++++++ .../io/testExcessiveFretDiagrams1_ref.mscx | 550 ++++++++++ .../io/testExcessiveFretDiagrams2.xml | 629 +++++++++++ .../io/testExcessiveFretDiagrams2_ref.mscx | 348 ++++++ mtest/musicxml/io/tst_mxml_io.cpp | 2 + 6 files changed, 2581 insertions(+) create mode 100644 mtest/musicxml/io/testExcessiveFretDiagrams1.xml create mode 100644 mtest/musicxml/io/testExcessiveFretDiagrams1_ref.mscx create mode 100644 mtest/musicxml/io/testExcessiveFretDiagrams2.xml create mode 100644 mtest/musicxml/io/testExcessiveFretDiagrams2_ref.mscx diff --git a/importexport/musicxml/importmxmlpass2.cpp b/importexport/musicxml/importmxmlpass2.cpp index b88750806eddd..0f816b2c087bc 100644 --- a/importexport/musicxml/importmxmlpass2.cpp +++ b/importexport/musicxml/importmxmlpass2.cpp @@ -1404,6 +1404,59 @@ static void resetTuplets(Tuplets& tuplets) } //--------------------------------------------------------- +// cleanFretDiagrams +//--------------------------------------------------------- +/** + PVG scores sometimes display fretboards for all chords at + the beginning. These often fail to translate correctly to + MusicXML, so we delete them here. + */ + +static void cleanFretDiagrams(Measure* measure) + { + if (measure->no() > 0) + return; + // Case 1: Dummy hidden first measure with all fretboards attached + bool isDummyMeasure = toMeasureBase(measure)->lineBreak(); + for (Segment* s = measure->first(SegmentType::ChordRest); s; s = s->next(SegmentType::ChordRest)) { + if (!isDummyMeasure) break; + for (Element* e : s->elist()) { + if (e && e->isChord() && e->visible()) { + isDummyMeasure = false; + break; + } + } + } + if (isDummyMeasure) { + for (Segment* s = measure->first(SegmentType::ChordRest); s; s = s->next(SegmentType::ChordRest)) { + for (Element* e : s->annotations()) { + if (e->isFretDiagram()) { + s->remove(e); + delete e; + } + } + } + } + + // Case 2: All the fretboards attached to first beat + Segment* firstBeat = measure->first(SegmentType::ChordRest); + QList beat1FretDiagrams; + int fretDiagramsTrack = -1; + for (Element* e : firstBeat->annotations()) { + if (e->isFretDiagram() + && (fretDiagramsTrack == e->track() || fretDiagramsTrack == -1)) { + beat1FretDiagrams.append(toFretDiagram(e)); + fretDiagramsTrack = e->track(); + } + } + if (beat1FretDiagrams.length() > 1 && fretDiagramsTrack != -1) { + for (FretDiagram* fd : beat1FretDiagrams) { + firstBeat->remove(fd); + delete fd; + } + } + } +//--------------------------------------------------------- // initPartState //--------------------------------------------------------- @@ -1626,6 +1679,7 @@ void MusicXMLParserPass2::scorePartwise() _score->lastMeasure()->setEndBarLineType(BarLineType::NORMAL, 0); _score->connectArpeggios(); + cleanFretDiagrams(_score->firstMeasure()); } //--------------------------------------------------------- diff --git a/mtest/musicxml/io/testExcessiveFretDiagrams1.xml b/mtest/musicxml/io/testExcessiveFretDiagrams1.xml new file mode 100644 index 0000000000000..ab61ed5ba1fdb --- /dev/null +++ b/mtest/musicxml/io/testExcessiveFretDiagrams1.xml @@ -0,0 +1,998 @@ + + + + + Excessive FretDiagrams + + + Henry Ives + + MuseScore 0.7.0 + 2007-09-10 + + + + + + + + + + 7 + 40 + + + 1697.14 + 1200 + + 85.7143 + 85.7143 + 85.7143 + 85.7143 + + + 85.7143 + 85.7143 + 85.7143 + 85.7143 + + + + + + + title + Excessive FretDiagrams 1 + + + subtitle + MuseScore Testcase + + + composer + Henry Ives + + + + brace + + + Piano + Pno. + + Piano + + + + 1 + 1 + 78.7402 + 0 + + + + + + + + + 50.00 + 0.00 + + 823.39 + + + + 1 + + 0 + + + + G + 2 + + + + + B + + dominant + + 6 + 4 + + 5 + 2 + + + 4 + 1 + + + 3 + 2 + + + 2 + 0 + + + 1 + 2 + + + + + + C + + major + + 6 + 4 + + 5 + 3 + + + 4 + 2 + + + 3 + 0 + + + 2 + 1 + + + 1 + 0 + + + + + + C + + minor + + 6 + 4 + 3 + + 5 + 3 + + + + 4 + 5 + + + 3 + 5 + + + 2 + 4 + + + 1 + 3 + + + + + + + E + + dominant + + 6 + 4 + + 6 + 0 + + + 5 + 2 + + + 4 + 0 + + + 3 + 1 + + + 2 + 0 + + + 1 + 0 + + + + + + F + + dominant + + 6 + 4 + + 6 + 1 + + + + 5 + 3 + + + 3 + 2 + + + 1 + 1 + + + + + + + G + + minor + + 6 + 4 + 3 + + 6 + 3 + + + + 5 + 5 + + + 4 + 5 + + + 1 + 3 + + + + + + + A + + dominant + + 6 + 4 + + 5 + 0 + + + 4 + 2 + + + 3 + 0 + + + 2 + 2 + + + 1 + 0 + + + + + + B + + dominant + + 6 + 4 + + 5 + 2 + + + 4 + 1 + + + 3 + 2 + + + 2 + 0 + + + 1 + 2 + + + + + + G + + dominant + + 6 + 4 + + 6 + 3 + + + 5 + 2 + + + 4 + 0 + + + 3 + 0 + + + 2 + 0 + + + 1 + 1 + + + + + + A + + dominant + + 6 + 4 + + 5 + 0 + + + 4 + 2 + + + 3 + 0 + + + 2 + 2 + + + 1 + 0 + + + + + + A + 4 + + 1 + 1 + quarter + up + + + + A + 4 + + 1 + 1 + quarter + up + + + + + B + 4 + + 1 + 1 + quarter + up + + + + 2 + 1 + half + + + + + + A + 4 + + 1 + 1 + quarter + up + + + + G + 4 + + 1 + 1 + quarter + up + + + + B + 3 + + 1 + 1 + quarter + up + + + + + A + 4 + + 1 + 1 + quarter + up + + + + + C + 5 + + 1 + 1 + quarter + up + + + + G + 4 + + 1 + 1 + quarter + up + + + + + B + 4 + + 1 + 1 + quarter + up + + + + + + G + 4 + + 1 + 1 + quarter + up + + + + 1 + 1 + quarter + + + + G + 4 + + 1 + 1 + quarter + up + + + + D + 5 + + 1 + 1 + quarter + down + + + + + + G + 4 + + 1 + 1 + quarter + up + + + + + A + 4 + + 1 + 1 + quarter + up + + + + + D + 5 + + 1 + 1 + quarter + up + + + + 1 + 1 + quarter + + + + B + 4 + + 1 + 1 + quarter + down + + + + F + 4 + + 1 + 1 + quarter + up + + + + + G + 4 + + 1 + 1 + quarter + up + + + + + + F + 4 + + 1 + 1 + quarter + up + + + + + A + 4 + + 1 + 1 + quarter + up + + + + E + 4 + + 1 + 1 + quarter + up + + + + + G + 4 + + 1 + 1 + quarter + up + + + + 2 + 1 + half + + + + + + G + 4 + + 1 + 1 + quarter + down + + + + + F + 5 + + 1 + 1 + quarter + down + + + + D + 4 + + 1 + 1 + quarter + up + + + + B + 4 + + 1 + 1 + quarter + down + + + + 1 + 1 + quarter + + + + + + D + 4 + + 1 + 1 + quarter + up + + + + + F + 4 + + 1 + 1 + quarter + up + + + + + G + 4 + + 1 + 1 + quarter + up + + + + + D + 5 + + 1 + 1 + quarter + up + + + + 1 + 1 + quarter + + + + B + 4 + + 1 + 1 + quarter + down + + + + G + 4 + + 1 + 1 + quarter + down + + + + + G + 5 + + 1 + 1 + quarter + down + + + + + + F + 4 + + 1 + 1 + quarter + up + + + + D + 5 + + 1 + 1 + quarter + down + + + + B + 4 + + 1 + 1 + quarter + down + + + + 1 + 1 + quarter + + + + + + C + 4 + + 1 + 1 + quarter + up + + + + + D + 5 + + 1 + 1 + quarter + up + + + + B + 4 + + 1 + 1 + quarter + down + + + + + E + 5 + + 1 + 1 + quarter + down + + + + F + 4 + + 1 + 1 + quarter + up + + + + 1 + 1 + quarter + + + + + + B + 4 + + 1 + 1 + quarter + down + + + + D + 5 + + 1 + 1 + quarter + down + + + + 2 + 1 + half + + + + + + F + 4 + + 1 + 1 + quarter + up + + + + 1 + 1 + quarter + + + + C + 5 + + 1 + 1 + quarter + down + + + + 1 + 1 + quarter + + + + + + G + 4 + + 1 + 1 + quarter + up + + + + 1 + 1 + quarter + + + + 2 + 1 + half + + + light-heavy + + + + diff --git a/mtest/musicxml/io/testExcessiveFretDiagrams1_ref.mscx b/mtest/musicxml/io/testExcessiveFretDiagrams1_ref.mscx new file mode 100644 index 0000000000000..e7302f898fb1f --- /dev/null +++ b/mtest/musicxml/io/testExcessiveFretDiagrams1_ref.mscx @@ -0,0 +1,550 @@ + + + + + 0 + 480 + + 1 + 1 + 1 + 0 + + Henry Ives + + + + + + + + + Excessive FretDiagrams + + + + 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 + + + + Excessive FretDiagrams 1 + + + + + MuseScore Testcase + + + + right,top + + Henry Ives + + + + + + G + G + + + 4 + 4 + + + quarter + up + + 69 + 17 + + + + quarter + up + + 69 + 17 + + + 71 + 19 + + + + half + + + + + + + quarter + up + + 69 + 17 + + + + quarter + up + + 67 + 15 + + + + quarter + up + + 59 + 19 + + + 69 + 17 + + + 72 + 14 + + + + quarter + up + + 67 + 15 + + + 71 + 19 + + + + + + + + quarter + up + + 67 + 15 + + + + quarter + + + quarter + up + + 67 + 15 + + + + quarter + down + + 74 + 16 + + + + + + + + quarter + up + + 67 + 15 + + + 69 + 17 + + + 74 + 16 + + + + quarter + + + quarter + down + + 71 + 19 + + + + quarter + up + + 65 + 13 + + + 67 + 15 + + + + + + + + quarter + up + + 65 + 13 + + + 69 + 17 + + + + quarter + up + + 64 + 18 + + + 67 + 15 + + + + half + + + + + + + quarter + down + + 67 + 15 + + + 77 + 13 + + + + quarter + up + + 62 + 16 + + + + quarter + down + + 71 + 19 + + + + quarter + + + + + + + quarter + up + + 62 + 16 + + + 65 + 13 + + + 67 + 15 + + + 74 + 16 + + + + quarter + + + quarter + down + + 71 + 19 + + + + quarter + down + + 67 + 15 + + + 79 + 15 + + + + + + + + quarter + up + + 65 + 13 + + + + quarter + down + + 74 + 16 + + + + quarter + down + + 71 + 19 + + + + quarter + + + + + + + quarter + up + + 60 + 14 + + + 74 + 16 + + + + quarter + down + + 71 + 19 + + + 76 + 18 + + + + quarter + up + + 65 + 13 + + + + quarter + + + + + + + quarter + down + + 71 + 19 + + + + quarter + down + + 74 + 16 + + + + half + + + + + + + quarter + up + + 65 + 13 + + + + quarter + + + quarter + down + + 72 + 14 + + + + quarter + + + + + + + quarter + up + + 67 + 15 + + + + quarter + + + half + + + end + + + + + + diff --git a/mtest/musicxml/io/testExcessiveFretDiagrams2.xml b/mtest/musicxml/io/testExcessiveFretDiagrams2.xml new file mode 100644 index 0000000000000..91379efd59a66 --- /dev/null +++ b/mtest/musicxml/io/testExcessiveFretDiagrams2.xml @@ -0,0 +1,629 @@ + + + + + Excessive FretDiagrams 2 + + + Henry Ives + + MuseScore 0.7.0 + 2007-09-10 + + + + + + + + + + 7 + 40 + + + 1697.14 + 1200 + + 85.7143 + 85.7143 + 85.7143 + 85.7143 + + + 85.7143 + 85.7143 + 85.7143 + 85.7143 + + + + + + + title + Excessive FretDiagrams 2 + + + subtitle + MuseScore Testcase + + + composer + Henry Ives + + + + brace + + + Piano + Pno. + + Piano + + + + 1 + 1 + 78.7402 + 0 + + + + + + + + + 50.00 + 0.00 + + 186.72 + + + + 2 + + 0 + + + + G + 2 + + + + + C + + minor + + 6 + 4 + 3 + + 5 + 3 + + + + 4 + 5 + + + 3 + 5 + + + 2 + 4 + + + 1 + 3 + + + + + + + 1 + 1 + eighth + + + + D + + minor + + 6 + 4 + + 4 + 0 + + + 3 + 2 + + + 2 + 3 + + + 1 + 1 + + + + + + B + + dominant + + 6 + 4 + + 5 + 2 + + + 4 + 1 + + + 3 + 2 + + + 2 + 0 + + + 1 + 2 + + + + + + 1 + 1 + eighth + + + + F + + dominant + + 6 + 4 + + 6 + 1 + + + + 5 + 3 + + + 3 + 2 + + + 1 + 1 + + + + + + + 1 + 1 + eighth + + + + G + + dominant + + 6 + 4 + + 6 + 3 + + + 5 + 2 + + + 4 + 0 + + + 3 + 0 + + + 2 + 0 + + + 1 + 1 + + + + + + 1 + 1 + eighth + + + + G + + minor + + 6 + 4 + 3 + + 6 + 3 + + + + 5 + 5 + + + 4 + 5 + + + 1 + 3 + + + + + + + 1 + 1 + eighth + + + + G + + major + + 6 + 4 + + 6 + 3 + + + 5 + 2 + + + 4 + 0 + + + 3 + 0 + + + 2 + 0 + + + 1 + 3 + + + + + + 1 + 1 + eighth + + + + F + + dominant + + 6 + 4 + + 6 + 1 + + + + 5 + 3 + + + 3 + 2 + + + 1 + 1 + + + + + + + 1 + 1 + eighth + + + + F + + major + + 6 + 4 + + 6 + 1 + + + + 5 + 3 + + + 4 + 3 + + + 3 + 2 + + + 1 + 1 + + + + + + + 1 + 1 + eighth + + + + + + + G + 4 + + 2 + 1 + quarter + up + + + + 2 + 1 + quarter + + + + 4 + 1 + half + + + + + + G + 4 + + 2 + 1 + quarter + up + + + + 2 + 1 + quarter + + + + A + 4 + + 2 + 1 + quarter + up + + + + 2 + 1 + quarter + + + + + + A + 4 + + 2 + 1 + quarter + up + + + + 2 + 1 + quarter + + + + A + 4 + + 2 + 1 + quarter + up + + + + 2 + 1 + quarter + + + + + + G + 4 + + 2 + 1 + quarter + up + + + + 2 + 1 + quarter + + + + G + 4 + + 2 + 1 + quarter + up + + + + 2 + 1 + quarter + + + + + + A + 4 + + 2 + 1 + quarter + up + + + + 2 + 1 + quarter + + + + C + 5 + + 2 + 1 + quarter + down + + + + D + 5 + + 2 + 1 + quarter + down + + + + + + C + 5 + + 2 + 1 + quarter + down + + + + 2 + 1 + quarter + + + + B + 4 + + 2 + 1 + quarter + down + + + + F + 4 + + 2 + 1 + quarter + up + + + light-heavy + + + + diff --git a/mtest/musicxml/io/testExcessiveFretDiagrams2_ref.mscx b/mtest/musicxml/io/testExcessiveFretDiagrams2_ref.mscx new file mode 100644 index 0000000000000..eee918d2c600e --- /dev/null +++ b/mtest/musicxml/io/testExcessiveFretDiagrams2_ref.mscx @@ -0,0 +1,348 @@ + + + + + 0 + 480 + + 1 + 1 + 1 + 0 + + Henry Ives + + + + + + + + + Excessive FretDiagrams 2 + + + + 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 + + + + Excessive FretDiagrams 2 + + + + + MuseScore Testcase + + + + right,top + + Henry Ives + + + + + line + + + + G + G + + + 4 + 4 + + + 0 + eighth + + + 0 + eighth + + + 0 + eighth + + + 0 + eighth + + + 0 + eighth + + + 0 + eighth + + + 0 + eighth + + + 0 + eighth + + + + + + + quarter + up + + 67 + 15 + + + + quarter + + + half + + + + + + + quarter + up + + 67 + 15 + + + + quarter + + + quarter + up + + 69 + 17 + + + + quarter + + + + + + + quarter + up + + 69 + 17 + + + + quarter + + + quarter + up + + 69 + 17 + + + + quarter + + + + + + + quarter + up + + 67 + 15 + + + + quarter + + + quarter + up + + 67 + 15 + + + + quarter + + + + + + + quarter + up + + 69 + 17 + + + + quarter + + + quarter + down + + 72 + 14 + + + + quarter + down + + 74 + 16 + + + + + + + + quarter + down + + 72 + 14 + + + + quarter + + + quarter + down + + 71 + 19 + + + + quarter + up + + 65 + 13 + + + + end + + + + + + diff --git a/mtest/musicxml/io/tst_mxml_io.cpp b/mtest/musicxml/io/tst_mxml_io.cpp index 0c2356f6d5955..b24e492aaf5cf 100644 --- a/mtest/musicxml/io/tst_mxml_io.cpp +++ b/mtest/musicxml/io/tst_mxml_io.cpp @@ -108,6 +108,8 @@ private slots: void dynamics3() { mxmlIoTestRef("testDynamics3"); } void emptyMeasure() { mxmlIoTestRef("testEmptyMeasure"); } void emptyVoice1() { mxmlIoTestRef("testEmptyVoice1"); } + void excessiveFretDiagrams1() { mxmlImportTestRef("testExcessiveFretDiagrams1"); } + void excessiveFretDiagrams2() { mxmlImportTestRef("testExcessiveFretDiagrams2"); } void extendedLyrics() { mxmlIoTestRef("testExtendedLyrics"); } void figuredBass1() { mxmlIoTest("testFiguredBass1"); } void figuredBass2() { mxmlIoTest("testFiguredBass2"); }