TupletReader fills in a missing <tuplet-actual> or <tuplet-normal> from <time-modification>,
but each guess function writes the other side's number
(src/private/mx/impl/TupletReader.cpp:118-160):
guessNormalFromNote sets actualNumber from actual-notes.
guessActualFromNote sets normalNumber from normal-notes.
When both elements are absent, the two mistakes cancel out. When only one is present, its explicit
tuplet-number is overwritten and the absent side is never guessed. For example,
<tuplet-actual><tuplet-number>5</tuplet-number></tuplet-actual> on a note with
<actual-notes>3</actual-notes> reads as actualNumber == 3, and normalNumber keeps its default.
guessActualFromNote also takes actualDurationName from normal-type.
Related: #428, #434. Found while auditing silent recoveries for #432 (#439).
TupletReaderfills in a missing<tuplet-actual>or<tuplet-normal>from<time-modification>,but each guess function writes the other side's number
(
src/private/mx/impl/TupletReader.cpp:118-160):guessNormalFromNotesetsactualNumberfromactual-notes.guessActualFromNotesetsnormalNumberfromnormal-notes.When both elements are absent, the two mistakes cancel out. When only one is present, its explicit
tuplet-numberis overwritten and the absent side is never guessed. For example,<tuplet-actual><tuplet-number>5</tuplet-number></tuplet-actual>on a note with<actual-notes>3</actual-notes>reads asactualNumber == 3, andnormalNumberkeeps its default.guessActualFromNotealso takesactualDurationNamefromnormal-type.Related: #428, #434. Found while auditing silent recoveries for #432 (#439).