Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MusicXML Support #19

Open
orchetect opened this issue May 12, 2023 · 1 comment
Open

MusicXML Support #19

orchetect opened this issue May 12, 2023 · 1 comment
Labels
enhancement New feature or request

Comments

@orchetect
Copy link
Owner

orchetect commented May 12, 2023

Proposal

Add support for reading and authoring MusicXML.

Support for markers will be the main priority.

Considerations

A bit of testing is needed to determine if precise timing information can be derived.

  • There is a possibility that it may be a fairly lossy format.
  • It's also not totally clear whether MusicXML supports a novel 'marker' element type. It appears be treated as generic text which means that various DAWs may encode or interpret it differently.
  • In practicality, using MusicXML may not be as worthwhile as other potential formats.

Preliminary Observations

For example, a MusicXML xml file exported from Digital Performer 10 is summarized below.

  • It contains two markers: one at 1:00:00:00, and another at 1:00:01:00
  • DP exports markers as Direction markings. The <direction> element with inner element <words> are used.
  • Similar to a MIDI file, it contains tempo, time signature, and PPQ information.
  • However, no frame rate or origin timecode information is included and would need to be supplied separately by the user.
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">

<score-partwise>
	<identification>
		<creator type="composer">Steffan Andrews</creator>
		<rights>© Steffan Andrews</rights>
		<encoding>
			<software>Digital Performer 10.13 86175</software>
			<encoding-date>2021-02-06</encoding-date>
			<supports attribute="new-system" element="print" type="no" value="yes"/>
			<supports attribute="new-page" element="print" type="no" value="yes"/>
			<supports element="accidental" type="yes"/>
			<supports element="beam" type="yes"/>
			<supports element="stem" type="no"/>
		</encoding>
	</identification>
	<part-list>
		<part-group number="2" type="start">
			<group-symbol>bracket</group-symbol>
			<group-barline>yes</group-barline>
		</part-group>
		<score-part id="P0">
			<part-name>MIDI-1</part-name>
			<part-abbreviation>MI.1</part-abbreviation>
		</score-part>
		<part-group number="2" type="stop"/>
	</part-list>
	<part id="P0">
		<measure number="1">
			<attributes>
				<divisions>480</divisions>
				<key>
					<fifths>0</fifths>
					<mode>major</mode>
				</key>
				<time>
					<beats>4</beats>
					<beat-type>4</beat-type>
				</time>
				<staves>1</staves>
				<clef number="1">
					<sign>G</sign>
					<line>2</line>
				</clef>
				<transpose>
					<diatonic>0</diatonic>
					<chromatic>0</chromatic>
					<octave-change>0</octave-change>
				</transpose>
			</attributes>
			<note>
				<rest measure="yes"/>
				<duration>1920</duration>
				<voice>1</voice>
				<staff>1</staff>
			</note>
			<direction placement="above">
				<direction-type>
					<metronome>
						<beat-unit>quarter</beat-unit>
						<per-minute>120.00</per-minute>
					</metronome>
				</direction-type>
				<offset>-1920</offset>
				<voice>1</voice>
				<staff>1</staff>
				<sound tempo="120.00"/>
			</direction>
		</measure>
		<measure number="2">
			<note>
				<rest measure="yes"/>
				<duration>1920</duration>
				<voice>1</voice>
				<staff>1</staff>
			</note>
		</measure>

                <!-- ... (snipped: empty measures 3 through 1800 which are identical to measure 2) ... -->

		<measure number="1801">
			<note>
				<rest measure="yes"/>
				<duration>1920</duration>
				<voice>1</voice>
				<staff>1</staff>
			</note>
			<direction placement="above">
				<direction-type>
					<words>Unlocked Marker 1_00_00_00</words>
				</direction-type>
				<offset>-1920</offset>
				<voice>1</voice>
				<staff>1</staff>
			</direction>
			<direction placement="above">
				<direction-type>
					<words>Locked Marker 1_00_01_00</words>
				</direction-type>
				<offset>-960</offset>
				<voice>1</voice>
				<staff>1</staff>
			</direction>
		</measure>
		<measure number="1802">
			<note>
				<rest measure="yes"/>
				<duration>1920</duration>
				<voice>1</voice>
				<staff>1</staff>
			</note>
			<barline location="right">
				<bar-style>light-heavy</bar-style>
			</barline>
		</measure>
	</part>
</score-partwise>

References

https://github.com/w3c/musicxml/blob/799e2defb2ece0ae7bafe08dcbcac25b2c631d53/schema/direction.mod#L83-L97

https://github.com/w3c/musicxml/blob/799e2defb2ece0ae7bafe08dcbcac25b2c631d53/schema/direction.mod#L117-L127

@orchetect
Copy link
Owner Author

Update: Importing the above xml file into Cubase does not import any text or marker events.

So the theory is correct that there is no standard MusicXML event type for a marker.

@orchetect orchetect added the enhancement New feature or request label Aug 13, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

1 participant