mirror of
https://github.com/microtherion/VocalEasel.git
synced 2024-12-22 11:14:00 +00:00
222 lines
6.2 KiB
DTD
222 lines
6.2 KiB
DTD
|
<!--
|
||
|
Standard MIDI File DTD: MIDI XML
|
||
|
|
||
|
Version 1.1 - 20 May 2005
|
||
|
|
||
|
Copyright © 2004-2005 Recordare LLC.
|
||
|
http://www.recordare.com/
|
||
|
|
||
|
This MusicXML work is being provided by the copyright
|
||
|
holder under the MusicXML Document Type Definition
|
||
|
Public License Version 1.02, available from:
|
||
|
|
||
|
http://www.recordare.com/dtds/license.html
|
||
|
-->
|
||
|
|
||
|
<!--
|
||
|
MIDI XML is an XML representation of standard MIDI files.
|
||
|
Unlike standard MIDI files, it can have timestamps
|
||
|
present as either absolute or delta values. This makes
|
||
|
it convenient as an intermediate format to convert from
|
||
|
MusicXML or other formats where note on and note off are
|
||
|
not represented as discrete events. To convert to
|
||
|
standard MIDI files, delta values must be used.
|
||
|
|
||
|
Suggested use:
|
||
|
|
||
|
<!DOCTYPE MIDIFile PUBLIC
|
||
|
"-//Recordare//DTD MusicXML 1.1 MIDI//EN"
|
||
|
"http://www.musicxml.org/dtds/midixml.dtd">
|
||
|
|
||
|
-->
|
||
|
|
||
|
<!--
|
||
|
For Standard MIDI Files, channels are required; events
|
||
|
are not rechannelized.
|
||
|
-->
|
||
|
<!ENTITY % ChannelRequired "#REQUIRED">
|
||
|
|
||
|
<!-- Component DTDs -->
|
||
|
|
||
|
<!--
|
||
|
The MMA MIDI DTD contains the definitions of all
|
||
|
MIDI events. Its regular address is:
|
||
|
|
||
|
http://www.midi.org/dtds/MIDIEvents10.dtd
|
||
|
|
||
|
For convenience, we include a local copy with our
|
||
|
definition, and reference that here.
|
||
|
-->
|
||
|
<!ENTITY % midi PUBLIC
|
||
|
"-//MIDI Manufacturers Association//DTD MIDIEvents 1.0//EN"
|
||
|
"MIDIEvents10.dtd">
|
||
|
%midi;
|
||
|
|
||
|
<!--
|
||
|
Timestamps are either delta or absolute. They must all
|
||
|
be one or the other throughout the MidiXML file.
|
||
|
Timestamps are numeric values measured in MIDI ticks.
|
||
|
-->
|
||
|
<!ENTITY % Timestamp "(Delta | Absolute)">
|
||
|
<!ELEMENT Delta (#PCDATA)>
|
||
|
<!ELEMENT Absolute (#PCDATA)>
|
||
|
|
||
|
<!--
|
||
|
Standard MIDI File events include MIDI Channel messages,
|
||
|
meta-events, and system exclusive events. Each track is
|
||
|
a series of events. The MetaEvent and SysExEvent elements
|
||
|
are defined below. The MIDIChannelMessage and MIDIMessage
|
||
|
events are defined in the MMA's MIDI DTD (RP-038).
|
||
|
-->
|
||
|
<!ENTITY % MetaEvent
|
||
|
"(SequenceNumber | TextEvent | CopyrightNotice |
|
||
|
TrackName | InstrumentName | Lyric | Marker |
|
||
|
CuePoint | ProgramName | DeviceName | Port |
|
||
|
MIDIChannelPrefix | EndOfTrack | SetTempo |
|
||
|
SMPTEOffset | TimeSignature | KeySignature |
|
||
|
SequencerSpecific | OtherMetaEvent)">
|
||
|
|
||
|
<!ENTITY % SysExEvent
|
||
|
"(SystemExclusive | EndOfExclusive)">
|
||
|
|
||
|
<!ENTITY % SmfEvent
|
||
|
"(%MIDIChannelMessage; | %MetaEvent; | %SysExEvent;)">
|
||
|
|
||
|
<!ELEMENT Event (%Timestamp;, %SmfEvent;)>
|
||
|
|
||
|
<!--
|
||
|
MIDI meta events. If empty, the value for the event
|
||
|
is contained in an attribute, following the pattern
|
||
|
of the MMA's MIDI DTD. Textual meta events have their
|
||
|
values as text within the element.
|
||
|
-->
|
||
|
<!ELEMENT SequenceNumber EMPTY>
|
||
|
<!ATTLIST SequenceNumber
|
||
|
Value NMTOKEN #REQUIRED>
|
||
|
<!ELEMENT TextEvent (#PCDATA)>
|
||
|
<!ELEMENT CopyrightNotice (#PCDATA)>
|
||
|
<!ELEMENT TrackName (#PCDATA)>
|
||
|
<!ELEMENT InstrumentName (#PCDATA)>
|
||
|
<!ELEMENT Lyric (#PCDATA)>
|
||
|
<!ELEMENT Marker (#PCDATA)>
|
||
|
<!ELEMENT CuePoint (#PCDATA)>
|
||
|
<!ELEMENT MIDIChannelPrefix EMPTY>
|
||
|
<!ATTLIST MIDIChannelPrefix
|
||
|
Value NMTOKEN #REQUIRED>
|
||
|
<!ELEMENT EndOfTrack EMPTY>
|
||
|
<!ELEMENT SetTempo EMPTY>
|
||
|
<!ATTLIST SetTempo
|
||
|
Value NMTOKEN #REQUIRED>
|
||
|
<!ELEMENT SMPTEOffset EMPTY>
|
||
|
<!ATTLIST SMPTEOffset
|
||
|
TimeCodeType NMTOKEN #REQUIRED
|
||
|
Hour NMTOKEN #REQUIRED
|
||
|
Minute NMTOKEN #REQUIRED
|
||
|
Second NMTOKEN #REQUIRED
|
||
|
Frame NMTOKEN #REQUIRED
|
||
|
FractionalFrame NMTOKEN #REQUIRED>
|
||
|
<!ELEMENT TimeSignature EMPTY>
|
||
|
<!ATTLIST TimeSignature
|
||
|
Numerator NMTOKEN #REQUIRED
|
||
|
LogDenominator NMTOKEN #REQUIRED
|
||
|
MIDIClocksPerMetronomeClick NMTOKEN #REQUIRED
|
||
|
ThirtySecondsPer24Clocks NMTOKEN #REQUIRED>
|
||
|
<!ELEMENT KeySignature EMPTY>
|
||
|
<!ATTLIST KeySignature
|
||
|
Fifths NMTOKEN #REQUIRED
|
||
|
Mode NMTOKEN #REQUIRED>
|
||
|
<!ELEMENT SequencerSpecific (#PCDATA)>
|
||
|
|
||
|
<!--
|
||
|
The ProgramName and DeviceName meta-events are described
|
||
|
in RP-019 from the MMA. They allow a Standard MIDI file
|
||
|
to address multiple devices, enabling more than 16
|
||
|
channels of MIDI playback.
|
||
|
-->
|
||
|
<!ELEMENT ProgramName (#PCDATA)>
|
||
|
<!ELEMENT DeviceName (#PCDATA)>
|
||
|
|
||
|
|
||
|
<!--
|
||
|
The XMFPatchTypePrefix meta-event is described in
|
||
|
RP-032 from the MMA. It allows specification of using
|
||
|
General MIDI 1, General MIDI 2, or DLS to interpret
|
||
|
subsequent program change and bank select messages
|
||
|
in the same track.
|
||
|
-->
|
||
|
<!ELEMENT XMFPatchTypePrefix EMPTY>
|
||
|
<!ATTLIST XMFPatchTypePrefix
|
||
|
Value NMTOKEN #REQUIRED>
|
||
|
|
||
|
<!--
|
||
|
The meta-event hex 21 has been used, at least
|
||
|
unofficially, for a MIDI port or cable number.
|
||
|
RP-019 deprecates this in favor of the DeviceName
|
||
|
meta-event, but programs still use this.
|
||
|
-->
|
||
|
<!ELEMENT Port EMPTY>
|
||
|
<!ATTLIST Port
|
||
|
Value NMTOKEN #REQUIRED>
|
||
|
|
||
|
<!--
|
||
|
An unrecognized meta-event has attributes for both its
|
||
|
event number in hex and its length. The data for the
|
||
|
invent is represented in hex within the element, as is
|
||
|
done for system exclusives.
|
||
|
-->
|
||
|
<!ELEMENT OtherMetaEvent (#PCDATA)>
|
||
|
<!ATTLIST OtherMetaEvent
|
||
|
Number NMTOKEN #REQUIRED>
|
||
|
|
||
|
<!--
|
||
|
MIDI system exclusive and end of exclusive events have
|
||
|
their data represented as a series of 2-digit hex
|
||
|
elements separated by spaces, as in the MMA MIDI DTD.
|
||
|
-->
|
||
|
<!ELEMENT SystemExclusive (#PCDATA)>
|
||
|
<!ELEMENT EndOfExclusive (#PCDATA)>
|
||
|
|
||
|
<!-- MIDI is the root element -->
|
||
|
<!ELEMENT MIDIFile (Format, TrackCount,
|
||
|
(TicksPerBeat | (FrameRate, TicksPerFrame)),
|
||
|
TimestampType, Track+)>
|
||
|
|
||
|
<!--
|
||
|
Format indicates MIDI format 0, 1, or 2. So far only
|
||
|
types 0 and 1 are explicitly supported by MidiXML.
|
||
|
-->
|
||
|
<!ELEMENT Format (#PCDATA)>
|
||
|
|
||
|
<!--
|
||
|
TrackCount indicate the number of tracks in a file:
|
||
|
1 for type 0, usually more for types 1 and 2.
|
||
|
-->
|
||
|
<!ELEMENT TrackCount (#PCDATA)>
|
||
|
|
||
|
<!--
|
||
|
How many ticks in a beat (MIDI quarter note).
|
||
|
-->
|
||
|
<!ELEMENT TicksPerBeat (#PCDATA)>
|
||
|
|
||
|
<!--
|
||
|
Frame rate and ticks per frame are used with SMPTE
|
||
|
time codes.
|
||
|
-->
|
||
|
<!ELEMENT FrameRate (#PCDATA)>
|
||
|
<!ELEMENT TicksPerFrame (#PCDATA)>
|
||
|
|
||
|
<!--
|
||
|
TimestampType should be Delta or Absolute. Indicates the
|
||
|
element name to look for in the initial timestamp in
|
||
|
each MIDI event.
|
||
|
-->
|
||
|
<!ELEMENT TimestampType (#PCDATA)>
|
||
|
|
||
|
<!--
|
||
|
Tracks contain the musical data and are made up of a
|
||
|
series of events. The track number attribute is
|
||
|
required.
|
||
|
-->
|
||
|
<!ELEMENT Track (Event*)>
|
||
|
<!ATTLIST Track Number NMTOKEN #REQUIRED>
|