From dcb48a69e3bb1e20b0edbd94148a9b007b2c5734 Mon Sep 17 00:00:00 2001 From: Michele Spagnolo Date: Wed, 15 Jan 2025 11:10:20 +0100 Subject: [PATCH 1/5] Fix add local time signatures in non-chronological order Resolves: #23411 --- src/engraving/dom/edit.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/engraving/dom/edit.cpp b/src/engraving/dom/edit.cpp index ce23219f5d88e..c0e432400b326 100644 --- a/src/engraving/dom/edit.cpp +++ b/src/engraving/dom/edit.cpp @@ -1317,6 +1317,9 @@ bool Score::rewriteMeasures(Measure* fm, const Fraction& ns, staff_idx_t staffId } Segment* s = nm->undoGetSegment(SegmentType::TimeSig, nm->tick()); for (size_t i = 0; i < nstaves(); ++i) { + if (staffIdx != muse::nidx && i != staffIdx) { + continue; + } if (!s->element(i * VOICES)) { TimeSig* ots = staff(i)->timeSig(nm->tick()); if (ots) { From a36076359762642c08cf3a6998017a024382af40 Mon Sep 17 00:00:00 2001 From: Michele Spagnolo Date: Wed, 15 Jan 2025 12:22:15 +0100 Subject: [PATCH 2/5] Add support for local time signature with parts Resolves: #18089 --- src/engraving/dom/edit.cpp | 41 +++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/src/engraving/dom/edit.cpp b/src/engraving/dom/edit.cpp index c0e432400b326..68a96898e2cc1 100644 --- a/src/engraving/dom/edit.cpp +++ b/src/engraving/dom/edit.cpp @@ -1201,18 +1201,21 @@ bool Score::rewriteMeasures(Measure* fm, const Fraction& ns, staff_idx_t staffId Measure* nm = nullptr; LayoutBreak* sectionBreak = nullptr; - // disable local time sig modifications in linked staves - if (staffIdx != muse::nidx && masterScore()->excerpts().size() > 0) { - MScore::setError(MsError::CANNOT_CHANGE_LOCAL_TIMESIG_HAS_EXCERPTS); - return false; - } - // // split into Measure segments fm-lm // + auto foundLM = [fm, staffIdx](MeasureBase* curMeas, Measure* curLM) { + if (!curMeas || !curMeas->isMeasure() || curLM->sectionBreak()) { + return true; + } + Segment* timeSigSeg = toMeasure(curMeas)->first(SegmentType::TimeSig); + if (timeSigSeg && curMeas != fm) { + return staffIdx == muse::nidx || timeSigSeg->element(staff2track(staffIdx)); + } + return false; + }; for (MeasureBase* measure = fm;; measure = measure->next()) { - if (!measure || !measure->isMeasure() || lm->sectionBreak() - || (toMeasure(measure)->first(SegmentType::TimeSig) && measure != fm)) { + if (foundLM(measure, lm)) { // save section break to reinstate after rewrite LayoutBreak* layoutBreak = lm->sectionBreakElement(); @@ -1379,10 +1382,15 @@ void Score::cmdAddTimeSig(Measure* fm, staff_idx_t staffIdx, TimeSig* ts, bool l startStaffIdx = staffIdx; endStaffIdx = startStaffIdx + 1; } else { - // TODO: get index for this score - LOGD("cmdAddTimeSig: unable to write local time signature change to linked score"); - startStaffIdx = 0; - endStaffIdx = 0; + const Staff* thisStaff = staff(staffIdx); + const Staff* linkedStaff = thisStaff->findLinkedInScore(score); + if (linkedStaff) { + startStaffIdx = linkedStaff->idx(); + endStaffIdx = startStaffIdx + 1; + } else { + startStaffIdx = 0; + endStaffIdx = 0; + } } } else { startStaffIdx = 0; @@ -1458,7 +1466,9 @@ void Score::cmdAddTimeSig(Measure* fm, staff_idx_t staffIdx, TimeSig* ts, bool l // we will only add time signatures if this succeeds // this means, however, that the rewrite cannot depend on the time signatures being in place if (mf) { - if (!mScore->rewriteMeasures(mf, ns, local ? staffIdx : muse::nidx)) { + auto staffIdxRangeOnMaster = getStaffIdxRange(mScore); + if (staffIdxRangeOnMaster.second != staffIdxRangeOnMaster.first + && !mScore->rewriteMeasures(mf, ns, local ? staffIdxRangeOnMaster.first : muse::nidx)) { undoStack()->activeCommand()->unwind(); return; } @@ -1517,11 +1527,6 @@ void Score::cmdAddTimeSig(Measure* fm, staff_idx_t staffIdx, TimeSig* ts, bool l void Score::cmdRemoveTimeSig(TimeSig* ts) { - if (ts->isLocal() && masterScore()->excerpts().size() > 0) { - MScore::setError(MsError::CANNOT_CHANGE_LOCAL_TIMESIG_HAS_EXCERPTS); - return; - } - Measure* m = ts->measure(); Segment* s = ts->segment(); From e151a25d2b660904db5d0a72641a7786f0d409cb Mon Sep 17 00:00:00 2001 From: Michele Spagnolo Date: Wed, 15 Jan 2025 16:04:02 +0100 Subject: [PATCH 3/5] Fix corruption on enter note mid-second-voice with local time sig Resolves: #26001 Resolves the freeze that occurs when opening the corrupted file. Also resolves the problem which causes the corruption in the first place. --- src/engraving/dom/check.cpp | 3 +++ src/engraving/dom/cmd.cpp | 5 +++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/engraving/dom/check.cpp b/src/engraving/dom/check.cpp index 04f54fcdf8938..929b9955fa50a 100644 --- a/src/engraving/dom/check.cpp +++ b/src/engraving/dom/check.cpp @@ -326,6 +326,9 @@ void Measure::checkMeasure(staff_idx_t staffIdx, bool useGapRests) LOGN("in measure underrun %6d at %d-%d track %zu", tick().ticks(), (currentPos / stretch).ticks(), (expectedPos / stretch).ticks(), track); fillGap(expectedPos, currentPos - expectedPos, track, stretch, useGapRests); + if (currentPos >= f) { + break; + } } DurationElement* de = cr; diff --git a/src/engraving/dom/cmd.cpp b/src/engraving/dom/cmd.cpp index 99ec33ad1195e..37f4c05554a6e 100644 --- a/src/engraving/dom/cmd.cpp +++ b/src/engraving/dom/cmd.cpp @@ -683,9 +683,10 @@ void Score::expandVoice(Segment* s, track_idx_t track) // Measure* m = s->measure(); Fraction stick = ps ? ps->tick() : m->tick(); + Fraction stretch = staff(track2staff(track))->timeStretch(stick); Fraction ticks = s->tick() - stick; if (ticks.isNotZero()) { - setRest(stick, track, ticks, false, 0); + setRest(stick, track, ticks * stretch, false, 0); } // @@ -701,7 +702,7 @@ void Score::expandVoice(Segment* s, track_idx_t track) if (ticks == m->ticks()) { addRest(s, track, TDuration(DurationType::V_MEASURE), 0); } else { - setRest(s->tick(), track, ticks, false, 0); + setRest(s->tick(), track, ticks * stretch, false, 0); } } From b5934a1a1264a46634ee16408bfbcedcaf1f0f25 Mon Sep 17 00:00:00 2001 From: Michele Spagnolo Date: Wed, 15 Jan 2025 19:17:05 +0100 Subject: [PATCH 4/5] Fix wrong tuplet position with local time sig Resolves: #25110 --- src/engraving/rendering/score/systemlayout.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engraving/rendering/score/systemlayout.cpp b/src/engraving/rendering/score/systemlayout.cpp index a4476148bf6e1..91b061d209b5d 100644 --- a/src/engraving/rendering/score/systemlayout.cpp +++ b/src/engraving/rendering/score/systemlayout.cpp @@ -850,7 +850,7 @@ void SystemLayout::layoutSystemElements(System* system, LayoutContext& ctx) // don't layout any tuplets covered by this top level tuplet for this voice-- // they've already been laid out by layoutTuplet(). - skipTo[track] = de->tick() + de->ticks(); + skipTo[track] = de->tick() + de->actualTicks(); } } From c55afd08b23e97f770656b8889b2ac324e2c8b73 Mon Sep 17 00:00:00 2001 From: Michele Spagnolo Date: Thu, 16 Jan 2025 13:32:28 +0100 Subject: [PATCH 5/5] Added unit test --- .../tests/timesig_data/timeSig-11.mscz | Bin 0 -> 91356 bytes src/engraving/tests/timesig_tests.cpp | 108 ++++++++++++++++++ 2 files changed, 108 insertions(+) create mode 100644 src/engraving/tests/timesig_data/timeSig-11.mscz diff --git a/src/engraving/tests/timesig_data/timeSig-11.mscz b/src/engraving/tests/timesig_data/timeSig-11.mscz new file mode 100644 index 0000000000000000000000000000000000000000..95a8f700cfe78629d11db150fca33e75def814c8 GIT binary patch literal 91356 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::TimeSig, m3->endTick())) << "Should be no timesig at the end of measure 3."; delete score; } + +TEST_F(Engraving_TimesigTests, timesig_11) +{ + MasterScore* score = ScoreRW::readScore(TIMESIG_DATA_DIR + u"timeSig-11.mscz"); + EXPECT_TRUE(score); + score->doLayout(); + + TimeSig* timeSig = Factory::createTimeSig(score->dummy()->segment()); + timeSig->setSig(Fraction(5, 4)); + + TimeSig* timeSig2 = Factory::createTimeSig(score->dummy()->segment()); + timeSig2->setSig(Fraction(7, 8)); + + TimeSig* timeSig3 = Factory::createTimeSig(score->dummy()->segment()); + timeSig3->setSig(Fraction(3, 4)); + + Measure* secondMeas = score->firstMeasure()->nextMeasure(); + Measure* thirdMeas = secondMeas->nextMeasure(); + staff_idx_t oboeStaff = 1; + staff_idx_t clarinetStaff = 2; + + // Add local timeSig to Clarinet staff at meas 3 + score->startCmd(TranslatableString::untranslatable("Engraving time signature tests")); + score->cmdAddTimeSig(thirdMeas, clarinetStaff, timeSig, true); + score->endCmd(); + // Check timeSig exist at meas 3 and is only on Clarinet + Segment* timeSigSegment = thirdMeas->findSegmentR(SegmentType::TimeSig, Fraction(0, 1)); + EXPECT_TRUE(timeSigSegment); + for (staff_idx_t stfIdx = 0; stfIdx < score->nstaves(); ++stfIdx) { + EngravingItem* timeSig = timeSigSegment->element(staff2track(stfIdx)); + if (stfIdx == clarinetStaff) { + EXPECT_TRUE(timeSig); + } else { + EXPECT_FALSE(timeSig); + } + } + + // Add local timeSig to Clarinet staff at meas 2 + score->startCmd(TranslatableString::untranslatable("Engraving time signature tests")); + score->cmdAddTimeSig(secondMeas, clarinetStaff, timeSig2, true); + score->endCmd(); + // Check timeSig exist at meas 2 and is only on Clarinet + Segment* timeSigSegment2 = secondMeas->findSegmentR(SegmentType::TimeSig, Fraction(0, 1)); + EXPECT_TRUE(timeSigSegment2); + for (staff_idx_t stfIdx = 0; stfIdx < score->nstaves(); ++stfIdx) { + EngravingItem* timeSig = timeSigSegment2->element(staff2track(stfIdx)); + if (stfIdx == clarinetStaff) { + EXPECT_TRUE(timeSig); + } else { + EXPECT_FALSE(timeSig); + } + } + // Check no other timeSigs were added at measure 3 + for (staff_idx_t stfIdx = 0; stfIdx < score->nstaves(); ++stfIdx) { + EngravingItem* timeSig = timeSigSegment->element(staff2track(stfIdx)); + if (stfIdx == clarinetStaff) { + EXPECT_TRUE(timeSig); + } else { + EXPECT_FALSE(timeSig); + } + } + + // Add local timeSig to Oboe staff at meas 2 + score->startCmd(TranslatableString::untranslatable("Engraving time signature tests")); + score->cmdAddTimeSig(secondMeas, oboeStaff, timeSig3, true); + score->endCmd(); + // Check timeSig exist at meas 2 on Oboe and Clarinet + for (staff_idx_t stfIdx = 0; stfIdx < score->nstaves(); ++stfIdx) { + EngravingItem* timeSig = timeSigSegment2->element(staff2track(stfIdx)); + if (stfIdx == oboeStaff || stfIdx == clarinetStaff) { + EXPECT_TRUE(timeSig); + } else { + EXPECT_FALSE(timeSig); + } + } + // Check no other timeSigs were added at measure 3 + for (staff_idx_t stfIdx = 0; stfIdx < score->nstaves(); ++stfIdx) { + EngravingItem* timeSig = timeSigSegment->element(staff2track(stfIdx)); + if (stfIdx == clarinetStaff) { + EXPECT_TRUE(timeSig); + } else { + EXPECT_FALSE(timeSig); + } + } + + // Check all timeSigs have been correctly cloned to parts + for (Score* partScore : score->scoreList()) { + if (partScore->isMaster()) { + continue; + } + Segment* timeSigSeg1 = partScore->tick2segment(secondMeas->tick(), true, SegmentType::TimeSig); + Segment* timeSigSeg2 = partScore->tick2segment(thirdMeas->tick(), true, SegmentType::TimeSig); + EXPECT_TRUE(timeSigSeg1); + EXPECT_TRUE(timeSigSeg2); + if (partScore->name() == u"Oboe") { + EXPECT_TRUE(timeSigSeg1->element(0)); + EXPECT_FALSE(timeSigSeg2->element(0)); + } else if (partScore->name() == u"Clarinet in B♭") { + EXPECT_TRUE(timeSigSeg1->element(0)); + EXPECT_TRUE(timeSigSeg2->element(0)); + } else { + EXPECT_FALSE(timeSigSeg1->element(0)); + EXPECT_FALSE(timeSigSeg2->element(0)); + } + } + + delete score; +}