OggMIDI: Difference between revisions

From XiphWiki
Jump to navigation Jump to search
(Record the Ogg<->MIDI mapping)
 
(roughly document the encapsulation structure)
Line 2: Line 2:


This mapping was designed by Jack Moffitt. See [http://lists.xiph.org/pipermail/vorbis-dev/2001-August/004501.html this mailing list post] for documentation of his scheme.
This mapping was designed by Jack Moffitt. See [http://lists.xiph.org/pipermail/vorbis-dev/2001-August/004501.html this mailing list post] for documentation of his scheme.
= Header packet
OggMIDI streams have a single header packet for codec identification.
  0                  1                  2                  3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1| Byte
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identifier 'OggMIDI\0'                                        | 0-3
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                              | 4-7
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        version number        |        time format          | 8-11
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          timebase            |                                12-13
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
The header packet begins with the character sequence 'OggMIDI\0' for codec identification.
This is followed by an 8 bit version field. The version must be 0 for the mapping described here.
The time format field is also 8 bits, and describes the timestamp format used by the midi data. It is interpreted as follows:
* 1 one beat per quarter note
* 24, 25, 29, 30, (50, 59, 60?) corresponding smpte frame
* other values are undefined
The timebase occupies the final 16 bits and gives the number of ticks per time format unit.
= Data packets
The header packet is followed by a series of data packets, each of which contains an integral number of midi events.

Revision as of 12:37, 5 November 2008

Mapping for embedding MIDI data streams in Ogg.

This mapping was designed by Jack Moffitt. See this mailing list post for documentation of his scheme.

= Header packet

OggMIDI streams have a single header packet for codec identification.

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1| Byte
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identifier 'OggMIDI\0'                                        | 0-3
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               | 4-7
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        version number         |         time format           | 8-11
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           timebase            |                                 12-13
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

The header packet begins with the character sequence 'OggMIDI\0' for codec identification.

This is followed by an 8 bit version field. The version must be 0 for the mapping described here.

The time format field is also 8 bits, and describes the timestamp format used by the midi data. It is interpreted as follows:

  • 1 one beat per quarter note
  • 24, 25, 29, 30, (50, 59, 60?) corresponding smpte frame
  • other values are undefined

The timebase occupies the final 16 bits and gives the number of ticks per time format unit.

= Data packets

The header packet is followed by a series of data packets, each of which contains an integral number of midi events.