Loading…
Loading…
Rule
Gradus GE-357 · cite this code — it is permanent. Rule id tie-enharmonic-accidental-mismatch
Ties require identical spelling, not just identical sound — F#4 tied to Gb4 (enharmonically identical pitch, different spelling) is invalid; a tie must never be used to represent an enharmonic respelling.
In the JSX surface this IS caught (pitchesEqual does exact string compare, so 'F#4' !== 'Gb4' correctly returns false). In the public API it is NOT caught: `musicxml-export.ts` line 599 compares only `prev.pitch === n.pitch`, where `pitch` is a diatonic STEP integer that does not encode the accidental (`parsePitch` in jsonToScore.ts stores `accidental` in a SEPARATE field, lines 40-49). Two notes 'C4' (accidental: null) and 'C#4' (accidental: '#') compute the SAME diatonic pitch integer, so `tiedToNext` between them is checked ONLY against that integer (line 601 reads `prevNote?.tiedToNext` but never re-checks accidental) and is silently accepted and exported as a valid `<tie>`/`<tied>` pair in MusicXML.
Gould: tied notes must share 'the same pitch' understood as identical staff position AND accidental; Read: a tie 'cannot alter the pitch,' so a change of accidental — even an enharmonically silent one — voids the tie.
This rule can be decided from pitches, durations and voices — no layout required. A validator can check it before anything is drawn.
Gradus GE-357 — A tie's two notes must match in accidental, not just diatonic step. Gradus Engraving Rulebook v1.0. https://gradusmusic.com/engraving/rule/tie-enharmonic-accidental-mismatch
Rulebook v1.0 · text licensed CC-BY-4.0 · machine-readable at /api/v1/engraving/rules/tie-enharmonic-accidental-mismatch