| <!-- |
| Copyright 1999-2004 The Apache Software Foundation |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| |
| <!-- XMidi is the document level element |
| every XMidi document must have one. |
| Within each XMidi document is zero |
| or more chunk. |
| --> |
| <!ELEMENT XMidi (CHUNK*, MThd, (MTrk | CHUNK)*)> |
| <!ATTLIST XMidi VERSION CDATA #REQUIRED> |
| |
| <!ELEMENT MThd (FORMAT, TRACKS, PPNQ)> |
| <!-- see comments for CHUNK --> |
| <!ATTLIST MThd TYPE CDATA #REQUIRED> |
| <!ATTLIST MThd LENGTH CDATA #REQUIRED> |
| |
| <!ELEMENT FORMAT (#PCDATA)> |
| <!ELEMENT TRACKS (#PCDATA)> |
| <!ELEMENT PPNQ (#PCDATA)> |
| |
| <!-- a CHUNK consists of: |
| header |
| length |
| data |
| the header is the first four bytes of the |
| chunk and corresponds to the TYPE attribute. |
| the length is the second four byes of the |
| chunk and corresponds to the LENGTH attribute. |
| Note that the LENGTH is the length of the |
| data, not the data and the header. |
| The data follows the four byte length. |
| --> |
| <!ELEMENT CHUNK (HEXDATA*)> |
| <!ATTLIST CHUNK TYPE CDATA #REQUIRED> |
| <!ATTLIST CHUNK LENGTH CDATA #REQUIRED> |
| |
| <!ELEMENT HEXDATA (#PCDATA)> |
| |
| <!ELEMENT MTrk (DELTA*)> |
| <!-- see comments for CHUNK --> |
| <!ATTLIST MTrk TYPE CDATA #REQUIRED> |
| <!ATTLIST MTrk LENGTH CDATA #REQUIRED> |
| |
| <!ELEMENT DELTA (STATUS | EDATA | CHANNEL)> |
| <!ATTLIST DELTA DTIME CDATA #REQUIRED> |
| |
| <!ELEMENT STATUS (EDATA | CHANNEL)> |
| <!-- status name (for human readability) --> |
| <!ATTLIST STATUS SNAM CDATA #REQUIRED> |
| <!-- non-midi type (optional) --> |
| <!ATTLIST STATUS SNMT CDATA #IMPLIED> |
| <!-- actual status byte in hex --> |
| <!ATTLIST STATUS SVAL CDATA #REQUIRED> |
| <!-- length of status data (after length field) |
| (actual data will be in EDATA) --> |
| <!ATTLIST STATUS SLEN CDATA #REQUIRED> |
| |
| <!ELEMENT EDATA (#PCDATA)> |
| |
| <!ELEMENT CHANNEL (NOTE_OFF | NOTE_ON | AFTER | |
| CONTROL | PROGRAM | PRESSURE | WHEEL)> |
| <!-- the CHANNEL tag covers midi messages 80-EF. |
| in each of these cases, the first nibble of the |
| status byte tells us the event type, while |
| the second nibble tells us the channel number. |
| Depending on the event type, the status byte |
| is followed by 1 or 2 data bytes. |
| --> |
| <!ATTLIST CHANNEL TYPE CDATA #REQUIRED> |
| <!ATTLIST CHANNEL NUMBER CDATA #REQUIRED> |
| |
| <!ELEMENT NOTE_OFF EMPTY> |
| <!-- two data bytes: pitch, velocity. |
| The name is like C# or Ab. |
| The register is to be determined. |
| --> |
| <!ATTLIST NOTE_OFF PITCH CDATA #REQUIRED> |
| <!ATTLIST NOTE_OFF VELOCITY CDATA #REQUIRED> |
| <!ATTLIST NOTE_OFF NAME CDATA #IMPLIED> |
| <!ATTLIST NOTE_OFF REGISTER CDATA #IMPLIED> |
| |
| <!ELEMENT NOTE_ON EMPTY> |
| <!-- two data bytes: pitch, velocity. |
| The name is like C# or Ab. |
| The register is to be determined. |
| VIRTUAL_OFF is for the case of |
| velocity = 0, where it can be |
| interpreted as a note off message. |
| --> |
| <!ATTLIST NOTE_ON PITCH CDATA #REQUIRED> |
| <!ATTLIST NOTE_ON VELOCITY CDATA #REQUIRED> |
| <!ATTLIST NOTE_ON VIRTUAL_OFF CDATA #IMPLIED> |
| <!ATTLIST NOTE_ON NAME CDATA #IMPLIED> |
| <!ATTLIST NOTE_ON REGISTER CDATA #IMPLIED> |
| |
| <!ELEMENT AFTER EMPTY> |
| <!-- after touch message has |
| two data bytes: pitch, pressure |
| The name is like C# or Ab. |
| The register is to be determined. |
| --> |
| <!ATTLIST AFTER PITCH CDATA #REQUIRED> |
| <!ATTLIST AFTER PRESSURE CDATA #REQUIRED> |
| <!ATTLIST AFTER NAME CDATA #IMPLIED> |
| <!ATTLIST AFTER REGISTER CDATA #IMPLIED> |
| |
| <!ELEMENT CONTROL EMPTY> |
| <!-- control change message has |
| two data bytes: control number and value. |
| Each number has a name associated with it. |
| --> |
| <!ATTLIST CONTROL NUMBER CDATA #REQUIRED> |
| <!ATTLIST CONTROL VALUE CDATA #REQUIRED> |
| <!ATTLIST CONTROL NAME CDATA #IMPLIED> |
| |
| <!ELEMENT PROGRAM EMPTY> |
| <!-- program (patch) change message |
| has one data byte, the patch number. |
| Patch numbers have General Midi |
| equivalents (GMNAME). --> |
| <!ATTLIST PROGRAM NUMBER CDATA #REQUIRED> |
| <!ATTLIST PROGRAM GMNAME CDATA #IMPLIED> |
| |
| <!ELEMENT PRESSURE EMPTY> |
| <!-- channel pressure message has |
| one byte amount --> |
| <!ATTLIST PRESSURE AMOUNT CDATA #REQUIRED> |
| |
| <!ELEMENT WHEEL EMPTY> |
| <!-- pitch wheel message has a |
| two byte PW amount. |
| This is really one 14-bit value split over two |
| bytes, using the lo-ord 7 bits of each byte. |
| Express here as an integer from 0 to 2**14-1 |
| --> |
| <!ATTLIST WHEEL AMOUNT CDATA #REQUIRED> |