MusicXml - full melisma <extend> implementation for exports

• Nov 16, 2015 - 08:55
S5 - Suggestion

At present, when melisma are exported in MusicXml, there is only a single extend node put in the lyric node where it starts.
There is no reliable way to determine where it is supposed to stop.
This becomes a problem where there are notes in the same voice between the end of the melisma and the next lyric.

Please implement a full melisma export.
It appears that the information already exists in MuseScore as we can create this kind of scenario within MuseScore at the moment.

The needed exported nodes are

<extend type="start"/> - on the note where the melisma starts
<extend type="stop"/> - on the note where the melisma stops

Examples are given in the files attached.

Attachment Size
Melisma_test.mscz 9.2 KB
Melisma_test_requested.xml 28.51 KB


My take:

The complication is that we don't actually store any particular information about the end note for the melisma. In the score, we actually just store a "ticks" attributes that records the length for which the melisma line should be extended during layout. It is only during layout that we figure out which note this might correspond with. It seems we do store cache a pointer to that note in our internal representation of the melisma line, but there is no corresponding pointer from the "end note" back to the melisma line, so no easy way to know during MusicXML export whether a given note should get a "stop" tag. We'd have to either add such a pointer to the ChordRest structure, or perhaps build up a table during export, or something along those lines.