Open bryantgeorge opened 1 year ago
Here is your example converted into MEI then SVG with verovio:
Transcoded from MusicXML
And here is the MIDI rendering from MEI with verovio, which is playing as you describe: example.zip
This is a correct rendering once converted to MEI. The problem is that the first rest in the bottom staff:
<note>
<rest measure="yes"/>
<duration>2</duration>
<voice>1</voice>
</note>
is given a duration of 2 quarter notes, while the full measure is in 4/4 (4 quarter notes).
The measure@implicit="yes"
indicates a pickup measure:
https://www.w3.org/2021/06/musicxml40/musicxml-reference/elements/measure-partwise
Set to "yes" for measures where the measure number should never appear, such as pickup measures and the last half of mid-measure repeats. The value is "no" if not specified.
This rest must be displayed as a half-note rest, so such rests cannot be converted to <mRest>
in MEI and must instead be converted as note@dur="2"
. This must be identified by observing that measure@implicit
is set to yes
, and that the <meterSig>
does not match the given duration of the rest.
In theory the <mRest>
could be given a half-note duration, but this would still result in an incorrect rendering to SVG as a whole-note rest (but the MIDI rendering would be correct).
Alternatively, the <mRest>
can be given a duration of "2" (half note), but the problem is that such a rest should be displayed as whole rests, which is incorrect since it must be displayed as a half-rest. Encoding as mRest@dur="2"
is legal MEI but is currently ignored by verovio (it only checks the <meterSig>
).
Describe the problem Rests with the
measure="yes"
attribute have their duration ignored during MIDI conversion.To Reproduce Convert the attached musicxml data to MIDI
Expected behavior The converted MIDI should play the music in the top staff (two quarters, then a whole note without any rest between)
Input data
Screenshots Currently, the exported MIDI plays like the following (ie. adds 2 beats of rest):