You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
read a cross-staff beam group across another voice's note without a backup in mx::impl #505
#492 (for #425) taught the reader that a change of <voice> text between two notes, with no <backup>, starts another voice, and taught the writer to put a voice that only plays in another voice's rests into those rests instead of after a <backup>.
One case was left as it was on main: a cross-staff beam group in a voice whose rests another voice fills.
MeasureReader::scanForCrossStaffBeamGroups (added for #289) runs before the notes are read and tracks open level-1 beam groups by the count of <backup>s so far, not by voice. It does not look at <voice> text. So when a note of voice 5 sits between two beamed notes of voice 4 with no <backup>, the scan sees voice 4's group broken, the same way a <forward> breaks it. The group is not recognized as cross-staff, and its notes are filed under the staff each one names instead of the voice's home staff.
What needs to be done:
Track open beam groups per staff and per <voice> text within a <backup> stretch, matching how findVoiceBucket now splits voices, so a note of another voice does not break the group.
Add a test: a two-staff measure where voice 1 has a beam group crossing to staff 2, and voice 2 plays in a rest inside that group with no <backup>. Read it, check the group's notes share one home staff, write it and read it back.
Activity