From 8391ef4153f6878759be67efd2a28560c1a813ea Mon Sep 17 00:00:00 2001 From: iveshenry18 Date: Fri, 2 Jul 2021 14:53:08 -0600 Subject: [PATCH] ENG-21: Connect cross-voice arpeggios Due to the one-to-one relationship between Arpeggios and Chords, there is no ideal way to import arpeggios that include notes across voices; currently, such a case results in the creation of one arpeggio for each chord with notes containing the tag. This commit adds a function to Score that iterates through these and connects them; this function is called after the score has been imported. Additionally, this commits corrects the exporting for this case, adding the tag to not only notes in a chord with an arpeggio, but notes that intersect an arpeggio in any voice in the given segment and staff. This effectively creates a correct round-trip for cross-voice arpeggios, although with the (theoretical) false positive of connecting multiple arpeggios in the same segment in the same staff even if they are intended to remain separate. Duplicate of #8506, plus fixing a merge conflict due to #8199 --- importexport/musicxml/exportxml.cpp | 24 +- importexport/musicxml/importmxmlpass2.cpp | 2 + libmscore/layout.cpp | 51 ++ libmscore/score.h | 1 + mtest/musicxml/io/testConnectedArpeggios.pdf | Bin 0 -> 20819 bytes mtest/musicxml/io/testConnectedArpeggios.xml | 645 ++++++++++++++++++ .../io/testConnectedArpeggios_ref.mscx | 535 +++++++++++++++ .../io/testConnectedArpeggios_ref.xml | 597 ++++++++++++++++ mtest/musicxml/io/tst_mxml_io.cpp | 2 + 9 files changed, 1855 insertions(+), 2 deletions(-) create mode 100644 mtest/musicxml/io/testConnectedArpeggios.pdf create mode 100644 mtest/musicxml/io/testConnectedArpeggios.xml create mode 100644 mtest/musicxml/io/testConnectedArpeggios_ref.mscx create mode 100644 mtest/musicxml/io/testConnectedArpeggios_ref.xml diff --git a/importexport/musicxml/exportxml.cpp b/importexport/musicxml/exportxml.cpp index cb7e2182df807..e0623bdc099e6 100644 --- a/importexport/musicxml/exportxml.cpp +++ b/importexport/musicxml/exportxml.cpp @@ -2824,6 +2824,26 @@ void ExportMusicXml::chordAttributes(Chord* chord, Notations& notations, Technic } } +//--------------------------------------------------------- +// findArpeggio +//--------------------------------------------------------- + +static Arpeggio* findArpeggio(Note* note) + { + if (note->chord()->arpeggio()) return note->chord()->arpeggio(); + + // Check if there is an arpeggio in any voice that intersects the note on the y-axis + for (int i = staff2track(note->staffIdx()); i < staff2track(note->staffIdx() + 1); ++i) { + Element* elem = note->chord()->segment()->elist()[i]; + if (elem && elem->isChord() + && toChord(elem)->arpeggio() + && note->pageBoundingRect().top() + note->headHeight() >= toChord(elem)->arpeggio()->pageBoundingRect().top() + && note->pageBoundingRect().top() + note->headHeight() <= toChord(elem)->arpeggio()->pageBoundingRect().bottom()) + return toChord(elem)->arpeggio(); + } + return 0; + } + //--------------------------------------------------------- // arpeggiate //--------------------------------------------------------- @@ -3464,8 +3484,8 @@ void ExportMusicXml::chord(Chord* chord, int staff, const std::vector* } technical.etag(_xml); - if (chord->arpeggio()) { - arpeggiate(chord->arpeggio(), note == nl.front(), note == nl.back(), _xml, notations); + if (Arpeggio* arp = findArpeggio(note)) { + arpeggiate(arp, note == nl.front(), note == nl.back(), _xml, notations); } for (Spanner* spanner : note->spannerFor()) if (spanner->type() == ElementType::GLISSANDO) { diff --git a/importexport/musicxml/importmxmlpass2.cpp b/importexport/musicxml/importmxmlpass2.cpp index f7351db941840..dd674dc1a5da8 100644 --- a/importexport/musicxml/importmxmlpass2.cpp +++ b/importexport/musicxml/importmxmlpass2.cpp @@ -1627,6 +1627,8 @@ void MusicXMLParserPass2::scorePartwise() auto lm = _score->lastMeasure(); if (lm && lm->endBarLineType() == BarLineType::NORMAL) lm->setEndBarLineType(BarLineType::NORMAL, 0); + + _score->connectArpeggios(); } //--------------------------------------------------------- diff --git a/libmscore/layout.cpp b/libmscore/layout.cpp index 308f4cfa28a47..6db0667ab90f9 100644 --- a/libmscore/layout.cpp +++ b/libmscore/layout.cpp @@ -11,6 +11,7 @@ //============================================================================= #include "accidental.h" +#include "arpeggio.h" #include "barline.h" #include "beam.h" #include "box.h" @@ -1525,6 +1526,56 @@ void Score::connectTies(bool silent) } } +//--------------------------------------------------------- +// connectArpeggios +// Fake cross-voice arpeggios by hiding all but the first +// and extending the first to cover the others. +// Retains the other properties of the first arpeggio. +//--------------------------------------------------------- + +void Score::connectArpeggios() + { + for (auto segment = firstSegment(SegmentType::ChordRest); segment; segment = segment->next1(SegmentType::ChordRest)) { + for (int staff = 0; staff < nstaves(); ++staff) { + qreal minTop = 10000; + qreal maxBottom = -10000; + int firstArpeggio = -1; + bool multipleArpeggios = false; + for (int i = staff2track(staff); i < staff2track(staff + 1); ++i) { + if (segment->elist()[i] && segment->elist()[i]->isChord()) { + Chord* chord = toChord(segment->elist()[i]); + if (chord->arpeggio() && chord->arpeggio()->visible()) { + if (chord->pagePos() == QPointF(0, 0)) doLayout(); + qreal localTop = chord->arpeggio()->pageBoundingRect().top(); + qreal localBottom = chord->arpeggio()->pageBoundingRect().bottom(); + minTop = qMin(localTop, minTop); + maxBottom = qMax(localBottom, maxBottom); + if (firstArpeggio == -1) + // Leave arpeggio, adjust height after collecting + firstArpeggio = i; + else { + // Hide arpeggio; firstArpeggio will be extended to cover it. + chord->arpeggio()->setVisible(false); + multipleArpeggios = true; + } + } + } + } + if (firstArpeggio != -1 && multipleArpeggios) { + // Stretch first arpeggio to cover deleted + Chord* firstArpeggioChord = toChord(segment->elist()[firstArpeggio]); + Arpeggio* arpeggio = firstArpeggioChord->arpeggio(); + qreal topDiff = minTop - arpeggio->pageBoundingRect().top(); + qreal bottomDiff = maxBottom - arpeggio->pageBoundingRect().bottom(); + arpeggio->setUserLen1(topDiff); + arpeggio->setUserLen2(bottomDiff); + arpeggio->setPropertyFlags(Pid::ARP_USER_LEN1, PropertyFlags::UNSTYLED); + arpeggio->setPropertyFlags(Pid::ARP_USER_LEN2, PropertyFlags::UNSTYLED); + } + } + } + } + //--------------------------------------------------------- // checkDivider //--------------------------------------------------------- diff --git a/libmscore/score.h b/libmscore/score.h index e410332a8b840..df88342f9cf80 100644 --- a/libmscore/score.h +++ b/libmscore/score.h @@ -1035,6 +1035,7 @@ class Score : public QObject, public ScoreElement { Segment* lastSegmentMM() const; void connectTies(bool silent=false); + void connectArpeggios(); qreal point(const Spatium sp) const { return sp.val() * spatium(); } diff --git a/mtest/musicxml/io/testConnectedArpeggios.pdf b/mtest/musicxml/io/testConnectedArpeggios.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9b8bad3484272f4bdbfb6d0776125b5adbacf6cb GIT binary patch literal 20819 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 wg(ZZ7eE_@xYTwi6Og;bTXg*f;GpNq4i{-Ok literal 0 HcmV?d00001 diff --git a/mtest/musicxml/io/testConnectedArpeggios.xml b/mtest/musicxml/io/testConnectedArpeggios.xml new file mode 100644 index 0000000000000..83b866c53cc6e --- /dev/null +++ b/mtest/musicxml/io/testConnectedArpeggios.xml @@ -0,0 +1,645 @@ + + + + + Connected Arpeggios + + + 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 + Connected Arpeggios + + + subtitle + MuseScore Testcase + + + composer + Henry Ives + + + + brace + + + Piano + Pno. + + Piano + + + + 1 + 1 + 78.7402 + 0 + + + + + + + + + 50.00 + 0.00 + + 170.00 + + + + 1 + + 0 + + + + G + 2 + + + + + C + 5 + + 1 + 1 + quarter + up + + + + + + + + E + 5 + + 1 + 1 + quarter + up + + + + + + + C + 5 + + 1 + 1 + quarter + up + + + + C + 5 + + 1 + 1 + quarter + up + + + + + E + 5 + + 1 + 1 + quarter + up + + + + G + 5 + + 1 + 1 + quarter + up + + + 4 + + + + F + 4 + + 4 + 2 + whole + + + + + + + + + C + 5 + + 1 + 1 + quarter + up + + + + C + 5 + + 1 + 1 + quarter + up + + + + + D + 5 + + 1 + 1 + quarter + up + + + + + G + 5 + + 1 + 1 + quarter + up + + + + F + 5 + + 1 + 1 + quarter + up + + + + B + 4 + + 1 + 1 + quarter + up + + + + + D + 5 + + 1 + 1 + quarter + up + + + 4 + + + + G + 4 + + 4 + 2 + whole + + + + + + C + 5 + + 1 + 1 + quarter + up + + + + A + 4 + + 1 + 1 + quarter + up + + + + + C + 5 + + 1 + 1 + quarter + up + + + + D + 5 + + 1 + 1 + quarter + up + + + + + F + 5 + + 1 + 1 + quarter + up + + + + C + 5 + + 1 + 1 + quarter + up + + + + + A + 5 + + 1 + 1 + quarter + up + + + 4 + + + + A + 4 + + 4 + 2 + whole + + + + + + B + 4 + + 1 + 1 + quarter + up + + + + A + 5 + + 1 + 1 + quarter + up + + + + D + 5 + + 1 + 1 + quarter + up + + + + + F + 5 + + 1 + 1 + quarter + up + + + + E + 5 + + 1 + 1 + quarter + up + + + 4 + + + + C + 5 + + 4 + 2 + whole + + + + + + E + 5 + + 1 + 1 + quarter + up + + + + + + + + B + 5 + + 1 + 1 + quarter + up + + + + + + + 1 + 1 + quarter + + + + E + 5 + + 1 + 1 + quarter + up + + + + 1 + 1 + quarter + + + 4 + + + + E + 4 + + 4 + 2 + whole + + + + + + D + 5 + + 1 + 1 + quarter + up + + + + + + + + E + 5 + + 1 + 1 + quarter + up + + + + + + + D + 5 + + 1 + 1 + quarter + up + + + + A + 5 + + 1 + 1 + quarter + up + + + + C + 5 + + 1 + 1 + quarter + up + + + 4 + + + + F + 4 + + 4 + 2 + whole + + + + + + + + + F + 5 + + 1 + 1 + quarter + up + + + + + + + B + 4 + + 1 + 1 + quarter + up + + + + A + 4 + + 1 + 1 + quarter + up + + + + + F + 5 + + 1 + 1 + quarter + up + + + + E + 5 + + 1 + 1 + quarter + up + + + + + G + 5 + + 1 + 1 + quarter + up + + + 4 + + + + G + 4 + + 4 + 2 + whole + + + + + + light-heavy + + + + diff --git a/mtest/musicxml/io/testConnectedArpeggios_ref.mscx b/mtest/musicxml/io/testConnectedArpeggios_ref.mscx new file mode 100644 index 0000000000000..58cedb91e4a2f --- /dev/null +++ b/mtest/musicxml/io/testConnectedArpeggios_ref.mscx @@ -0,0 +1,535 @@ + + + + + 0 + 480 + + 1 + 1 + 1 + 0 + + Henry Ives + + + + + + + + + Connected Arpeggios + + + + 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 + + + + Connected Arpeggios + + + + + MuseScore Testcase + + + + right,top + + Henry Ives + + + + + + G + G + + + 4 + 4 + + + quarter + up + + 72 + 14 + + + 76 + 18 + + + 0 + 2.10812 + + + + quarter + up + + 72 + 14 + + + + quarter + up + + 72 + 14 + + + 76 + 18 + + + + quarter + up + + 79 + 15 + + + + + + whole + + 65 + 13 + + + 0 + 0 + + + + + + + + quarter + up + + 72 + 14 + + + + quarter + up + + 72 + 14 + + + 74 + 16 + + + 79 + 15 + + + + quarter + up + + 77 + 13 + + + + quarter + up + + 71 + 19 + + + 74 + 16 + + + + + + whole + + 67 + 15 + + + + + + + + quarter + up + + 72 + 14 + + + + quarter + up + + 69 + 17 + + + 72 + 14 + + + + quarter + up + + 74 + 16 + + + 77 + 13 + + + + quarter + up + + 72 + 14 + + + 81 + 17 + + + + + + whole + + 69 + 17 + + + + + + + + quarter + up + + 71 + 19 + + + + quarter + up + + 81 + 17 + + + + quarter + up + + 74 + 16 + + + 77 + 13 + + + + quarter + up + + 76 + 18 + + + + + + whole + + 72 + 14 + + + + + + + + quarter + up + + 76 + 18 + + + 83 + 19 + + + 0 + + + + quarter + + + quarter + up + + 76 + 18 + + + + quarter + + + + + whole + + 64 + 18 + + + + + + + + quarter + up + + 74 + 16 + + + 76 + 18 + + + 0 + 2.10812 + + + + quarter + up + + 74 + 16 + + + + quarter + up + + 81 + 17 + + + + quarter + up + + 72 + 14 + + + + + + whole + + 65 + 13 + + + 0 + 0 + + + + + + + + quarter + up + + 77 + 13 + + + 0 + 2.98812 + + + + quarter + up + + 71 + 19 + + + + quarter + up + + 69 + 17 + + + 77 + 13 + + + + quarter + up + + 76 + 18 + + + 79 + 15 + + + + end + + + + + whole + + 67 + 15 + + + 0 + 0 + + + + + + + diff --git a/mtest/musicxml/io/testConnectedArpeggios_ref.xml b/mtest/musicxml/io/testConnectedArpeggios_ref.xml new file mode 100644 index 0000000000000..64c0528911c59 --- /dev/null +++ b/mtest/musicxml/io/testConnectedArpeggios_ref.xml @@ -0,0 +1,597 @@ + + + + + Connected Arpeggios + + + Henry Ives + + MuseScore 0.7.0 + 2007-09-10 + + + + + + + + + + Piano + Pno. + + Piano + + + + 1 + 1 + 78.7402 + 0 + + + + + + + 1 + + 0 + + + + G + 2 + + + + + C + 5 + + 1 + 1 + quarter + up + + + + + + + + E + 5 + + 1 + 1 + quarter + up + + + + + + + C + 5 + + 1 + 1 + quarter + up + + + + C + 5 + + 1 + 1 + quarter + up + + + + + E + 5 + + 1 + 1 + quarter + up + + + + G + 5 + + 1 + 1 + quarter + up + + + 4 + + + + F + 4 + + 4 + 2 + whole + + + + + + + + + C + 5 + + 1 + 1 + quarter + up + + + + C + 5 + + 1 + 1 + quarter + up + + + + + D + 5 + + 1 + 1 + quarter + up + + + + + G + 5 + + 1 + 1 + quarter + up + + + + F + 5 + + 1 + 1 + quarter + up + + + + B + 4 + + 1 + 1 + quarter + up + + + + + D + 5 + + 1 + 1 + quarter + up + + + 4 + + + + G + 4 + + 4 + 2 + whole + + + + + + C + 5 + + 1 + 1 + quarter + up + + + + A + 4 + + 1 + 1 + quarter + up + + + + + C + 5 + + 1 + 1 + quarter + up + + + + D + 5 + + 1 + 1 + quarter + up + + + + + F + 5 + + 1 + 1 + quarter + up + + + + C + 5 + + 1 + 1 + quarter + up + + + + + A + 5 + + 1 + 1 + quarter + up + + + 4 + + + + A + 4 + + 4 + 2 + whole + + + + + + B + 4 + + 1 + 1 + quarter + up + + + + A + 5 + + 1 + 1 + quarter + up + + + + D + 5 + + 1 + 1 + quarter + up + + + + + F + 5 + + 1 + 1 + quarter + up + + + + E + 5 + + 1 + 1 + quarter + up + + + 4 + + + + C + 5 + + 4 + 2 + whole + + + + + + E + 5 + + 1 + 1 + quarter + up + + + + + + + + B + 5 + + 1 + 1 + quarter + up + + + + + + + 1 + 1 + quarter + + + + E + 5 + + 1 + 1 + quarter + up + + + + 1 + 1 + quarter + + + 4 + + + + E + 4 + + 4 + 2 + whole + + + + + + D + 5 + + 1 + 1 + quarter + up + + + + + + + + E + 5 + + 1 + 1 + quarter + up + + + + + + + D + 5 + + 1 + 1 + quarter + up + + + + A + 5 + + 1 + 1 + quarter + up + + + + C + 5 + + 1 + 1 + quarter + up + + + 4 + + + + F + 4 + + 4 + 2 + whole + + + + + + + + + F + 5 + + 1 + 1 + quarter + up + + + + + + + B + 4 + + 1 + 1 + quarter + up + + + + A + 4 + + 1 + 1 + quarter + up + + + + + F + 5 + + 1 + 1 + quarter + up + + + + E + 5 + + 1 + 1 + quarter + up + + + + + G + 5 + + 1 + 1 + quarter + up + + + 4 + + + + G + 4 + + 4 + 2 + whole + + + + + + light-heavy + + + + diff --git a/mtest/musicxml/io/tst_mxml_io.cpp b/mtest/musicxml/io/tst_mxml_io.cpp index c76ec05289ba9..cb7035329198a 100644 --- a/mtest/musicxml/io/tst_mxml_io.cpp +++ b/mtest/musicxml/io/tst_mxml_io.cpp @@ -86,6 +86,8 @@ private slots: void clefs1() { mxmlIoTest("testClefs1"); } void clefs2() { mxmlIoTest("testClefs2"); } void completeMeasureRests() { mxmlIoTest("testCompleteMeasureRests"); } + void connectedArpeggios1() { mxmlImportTestRef("testConnectedArpeggios"); } + void connectedArpeggios2() { mxmlIoTestRef("testConnectedArpeggios"); } void cueNotes() { mxmlIoTest("testCueNotes"); } void cueNotes2() { mxmlMscxExportTestRef("testCueNotes2"); } void cueNotes3() { mxmlImportTestRef("testCueNotes3"); }