Skip to content

The playable part's repeated-note runs grow where excursions are refused, and a melisma mark can end up printed on one pitch #672

Description

@eolivelli

Found by review on #671 (which closes #670), and left for a separate change.

#670's rule prints an unsupported short excursion at the pitch the melody returned to, so a head that used to carry an accidental now repeats its neighbour. Two consequences nothing measures today.

Repeated-note runs grow. PlayablePartCheck does not count them; the reviewer's own driver did, and on the field recordings both the number of adjacent same-pitch head pairs and the longest run of them rise. Whether a longer run of one pitch reads better than the scattered accidentals it replaced is a question for a player, and the harness cannot answer it: it measures sounding time against the harmony, not what the page looks like. A run-length column would make the trade visible, and it is the column that would say when the rule has gone too far.

A melisma mark can contradict the printed heads. Melismas.marked decides at analysis time, from PlayableMelody.sungSyllables, which deliberately does not get the excursion pass — the pass needs the whole head sequence, and feeding it back would make marking depend on its own output. So a syllable can be marked as one the melody moves under and then print all its heads on one pitch. On the field recordings this affects a handful of marked syllables. The mark is not wrong about the estimate; it is stale about the arrangement. Options: re-run the mark decision against the printed heads at render time, or let the reduction drop a mark whose heads it flattened.

Neither blocks #670: the first is a page property that has never been measured, and the second is a small inconsistency in a mark that only chooses between collapsing a run and printing it.

Metadata

Metadata

Assignees

No one assigned

    Labels

    design-gapModel or API gap to close before dependants hit itmodule:arrangeThe mw-arrange modulepriority:lowNice to have, not blocking

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions