This post contains three questions about using Lyric Data Messages for melismas.
In the Universal MIDI Packet (UMP) and MIDI 2.0 Protocol Specification version 1.1, section 7.5.9 "Text Messages Common Format" (page 71) requires 0x00 data bytes to only appear in an End UMP or a Complete UMP. But later on this is contradicted by the Lyric Data Melisma Event (section 7.5.10.1 on page 74) and Ruby Data Melisma Event (section 7.5.12.1 on page 75), which require 0x00 data bytes to appear in a Continue UMP.
In fact, the specification seems to imply the only way to indicate a melisma is with a Lyric Data Continue UMP which is filled with 0x00 data bytes. But when I was thinking of melisma examples, I think you might need to use 0x00 data bytes in a Start UMP and End UMP as well.
Method A. The notes of a melisma use individual packets of a single Lyric message.
Section 7.5.10 Lyric Data message (page 73) requires "Each [Lyric Data] message shall contain an individual syllable [...]". My first interpretation of the spec is that a multi-note syllable will have Lyric message packets spread over the various notes of the syllable as shown in the following examples.
Question 1. Are the following "Method A" examples correct?
Example A1. Consider you are singing "Happy Birthday to You" to someone named Chris. When you get to the line "Happy birthday dear Chris," the mono-syllable word "Chris" is spread over two notes. Should the Lyric messages look like this?:
D0000201 48617000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Complete: "Hap")
D0000201 70792000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Complete: "py" space)
D0000201 62697174 68000000 00000000 (Group 1 Channel 1 Lyric Syllable Complete: "birth")
D0000201 64617920 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Complete: "day" space)
D0000201 64656172 20000000 00000000 (Group 1 Channel 1 Lyric Syllable Complete: "dear" space)
D0400201 43687269 732C2000 00000000 (Group 1 Channel 1 Lyric Syllable Start...: "Chris," space)
D0C00201 00000000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable End.....: all zero bytes)
Example A2. In the song "Angels We Have Heard On High", the first syllable of the "Gloria" is spread over 16 notes. Should the Lyric messages look like this?:
D0400201 476C6F00 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Start...: "Glo")
D0800201 00000000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Continue: all zero bytes)
D0800201 00000000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Continue: all zero bytes)
D0800201 00000000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Continue: all zero bytes)
D0800201 00000000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Continue: all zero bytes)
D0800201 00000000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Continue: all zero bytes)
D0800201 00000000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Continue: all zero bytes)
D0800201 00000000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Continue: all zero bytes)
D0800201 00000000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Continue: all zero bytes)
D0800201 00000000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Continue: all zero bytes)
D0800201 00000000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Continue: all zero bytes)
D0800201 00000000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Continue: all zero bytes)
D0800201 00000000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Continue: all zero bytes)
D0800201 00000000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Continue: all zero bytes)
D0800201 00000000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Continue: all zero bytes)
D0C00201 00000000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable End.....: all zero bytes)
D0000201 72690000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Complete: "ri")
D0000201 61200000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Complete: "a" space)
If these "Method A" examples are correct, then the section 7.5.9 may need to be revised to say 0x00 data bytes can appear in a Start UMP, a Continue UMP, or an End UMP of a Lyric message.
Question 2. If the "Method A" examples are correct, is it acceptable for the individual Start, Continue, and End UMPs of a multi-note syllable to be seperated by gaps of time long enough for a musical note to elapse? (For the other kinds of text messages, if the text is too long to fit in a single message, I get the feeling it might have been intended for the Start, Continue, and End UMPs that form the complete text data to have very small time gaps between them and to not have other messages between them.)
Method B. The notes of a melisma use seperate Lyric messages.
I noticed the MIDI 1.0 SMF Lyric Meta Event Definition specification also requires "Each syllable is an individual Lyric Meta Event", but then later describes a "Melisma Event" that contains no data indicates the previous syllable should continue to be sung. This sort of implies a "syllable event" followed by one or more "melisma events" are non-overlapping but related things, if I understand that correctly.
In the MIDI 2.0 Melisma events, was it intended to use a Complete UMP instead of a Continue UMP? That might be a closer match to the apparent concept in the MIDI 1.0 lyric specification, if I understand it correctly.
Question 3. Are the following "Method B" examples correct?
Example 1B. Consider you are singing "Happy Birthday to You" to someone named Chris. When you get to the line "Happy birthday dear Chris," the mono-syllable word "Chris" is spread over two notes. Should the Lyric messages look like this?:
D0000201 48617000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Complete: "Hap")
D0000201 70792000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Complete: "py" space)
D0000201 62697174 68000000 00000000 (Group 1 Channel 1 Lyric Syllable Complete: "birth")
D0000201 64617920 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Complete: "day" space)
D0000201 64656172 20000000 00000000 (Group 1 Channel 1 Lyric Syllable Complete: "dear" space)
D0000201 43687269 732C2000 00000000 (Group 1 Channel 1 Lyric Syllable Complete: "Chris," space)
D0000201 00000000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Complete: all zero bytes)
Example 2B. In the song "Angels We Have Heard On High", the first syllable of the "Gloria" is spread over 16 notes. Should the Lyric messages look like this?:
D0000201 476C6F00 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Complete: "Glo")
D0000201 00000000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Complete: all zero bytes)
D0000201 00000000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Complete: all zero bytes)
D0000201 00000000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Complete: all zero bytes)
D0000201 00000000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Complete: all zero bytes)
D0000201 00000000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Complete: all zero bytes)
D0000201 00000000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Complete: all zero bytes)
D0000201 00000000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Complete: all zero bytes)
D0000201 00000000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Complete: all zero bytes)
D0000201 00000000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Complete: all zero bytes)
D0000201 00000000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Complete: all zero bytes)
D0000201 00000000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Complete: all zero bytes)
D0000201 00000000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Complete: all zero bytes)
D0000201 00000000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Complete: all zero bytes)
D0000201 00000000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Complete: all zero bytes)
D0000201 00000000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Complete: all zero bytes)
D0000201 72690000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Complete: "ri")
D0000201 61200000 00000000 00000000 (Group 1 Channel 1 Lyric Syllable Complete: "a" space)
[quotePost id=18777]
In the MIDI 2.0 Melisma events, was it intended to use a Complete UMP instead of a Continue UMP?
[/quotePost]
I think is central to all the questions you ask. I will take this issue back to the SMF2 Working Group and the MIDI 2.0 Working Group. I believe a melisma should be a Complete UMP. I expect it will take a few weeks of process to make a correction to the specification.
Chair of MIDI 2.0 Working Group
A new version of the M2-104-UM Universal MIDI Packet (UMP) and MIDI 2.0 Protocol specification, version 1.1.1, addresses some of these topics. The definition of Melisma events has been corrected. It is now available here: https://midi.org/specifications/midi-2-0-specifications/midi2-core
Thanks,
Mike.
Chair of MIDI 2.0 Working Group