MIDI file format
MIDI file structure
Chunks
The MIDI file consists of Chunks:
Composition of each Chunk:
Type length data 4 bytes 4 bytes (previously specified) length
A 4- Byte Chunk Type (ASCII) A 4-Byte Length (32-bit, MSB First) (previously specified) length data
There are two types of Chunks:
HEADER CHUNKS
There is a chunk sign "mthd"
TRACK CHUNKS
There is a chunk sign "mtrk"
A MIDI file consists of a header chunk and a close one or more TRACK CHUNKS.
In the chunks structure, it is strictly regulated since the length zone. It may be contained in CHUNKS to be ignored in addition to "MTHD" or "MTRK". The MIDI manual requires that the software can handle unexpected Chunk and ignore the entire CHUNK.
<--- chunk --->
Type length data MIDI file:
MTHD 6
Numerical representation
In the MIDI file, in addition to basic MIDI data, there is also a variable data (type). Such as: Delta-Times and Meta-Events.
Here are some information about such numbers, they usually have 1 to 2 formats below:
Differential number variable length
Binary number
Storage of the binary:
Each byte 8-bit MSB first (the leftmost byte power (or digit)
(Unless other description)
Variable length number
This variable length is for convenience of representing any extensive integers without having to create an integer of a fixed width.
A variable length number is represented as a continuous 7-bit data. From the highest bit to the lowest position, the last byte bit7 is equal to 0, the previous byte bit7 is equal to 1.
example:
Number variable length
Decimal Hex Binary Binary Hex - abcd aaaabbbbccccdddd 100000aa 1aabbbbc 0cccdddd - 0: 127 00: 7F 0000 0000: 0111 1111 0000 0000: 0111 1111 00: 7F 128: 16383 80: 3FFF 00000000 10000000: 00111111 11111111 10000001 00000000 : 11111111 011111118100: FF 7F 1000 03E8 11 1110 1000 10000111 01101000 87 68 100000 010 0100 10111101 10000100 01000000 BD 84 40
Thus, you can find from the above example: small number (0 ~ 127) can be represented by one byte. And (compared) large numbers can also be expressed.
In the MIDI file, the maximum number is 0FFF, FFFF. This specified variable length allows for the use of 32-bit integers.
HEADER CHUNKS
The HEADER CHUNK data section includes three 16-bit (data) regions. This area description: (MIDI file) format, the number of TRACK and the time setting of MIDI.
The length of Header Chunk is 6 bytes. No matter how software must follow this principle. Even if it is greater than expected, any unexpected data is ignored. HEADER CHUNK
CHUNK Type Length Data 4 byte (ASCII) 4 bytes (32-bit binary) <- Length (= 6 bytes) -> 16-bit 16-bit 16-bit MTHD
The length of the CHUNK data section. This is a 32-bit binary number, MSB first. This is set to 6 in the MIDI 1.0 file manual. However, taking into account the future expansion, (Hope) Any of the author of any MIDI file can cope with large Header Chunks.
MIDI file format. This is a 16-bit binary number, MSB first. Effective formats are: 0, 1 and 2.
The number of TRACK Chunk in the MIDI file. This is a 16-bit binary number, MSB first.
This defines the number of Delta-TIMEs in the MIDI file (one) unit. This is a 16-bit binary number, MSB first.
There are two formats of the following, depend on the highest bit value.
Bit:
15 14 ... 8 7 ... 0
0 1/4 Musical Notes Tick 1 - Frame / Second Ticks / Frame
Bit 15 = 0:
BITS 0-14
The number of DELTA-TIMEs per 1/4 note.
Bit 15 = 1:
BITS 0-7
The number of Delta-TIMEs for each SMTPE frame.
BITS 8-14
Negative numbers, indicate the number of SMTPE frames per second. The effective number meets the MTC Quarter Frame message.
-24 = 24 frames per second
-25 = 25 frames / sec
-29 = 30 frames / sec, DROP FRAME
-30 = 30 frames / sec, Non-Drop Frame
MIDI file formats
There are three changes in the MIDI file:
Format 0 ... accommodate a single Track. Format 1 ... accommodate one and multiple synchronous tracks (all Track simultaneously play). Format 2 ... accommodate one and multiple independent Tracks (all TRACK stand-alone play).
MIDI file format 0
Format 0 MIDI file includes a header-chunk and a track-chunk.
This Track-Chunk includes all notes and beats messages.
MIDI file format 1
Format 1 MIDI file includes a Header-Chunk and multiple track-chunks, all TRACK play simultaneously.
The first Track in format 1 is dedicated. It looks "Tempo Map". It includes all Meta-Event: a beam marks, tape, tag / track name, tone number, tag, and SMTPE offset. In format 1 (these) will be placed in the first TRACK.
MIDI file format 2
The format 2 MIDI file includes a Header-Chunk and multiple track-chunks, each of which exhibits an independent order.
TRACK CHUNKS
The data part of the Track Chunk is composed of a pair of
TRACK CHUNK
Type length data 4 byte (ASCII) 4 bytes (32-bit binary number) <- length -> (binary number) mtrk
"Tick" relative to the previous event is a variable length number.
One of the following:
·
·
·
event
Note: There is no clear separator between
Delta-Time defines the highest bit of the last byte equal to 0. The MIDI CHANNEL message has a length definition. Sysex-Events and Meta-Events have a clear length zone.
MIDI event
MIDI CHANNEL message contains:
Channel Voice Messages Channel Mode Messages
Running Status is typically represented by the same state in the MIDI file. Running status can also be canceled.
SYSEX event
(Detailed Description of System Advanced Messages) is satisfactory and relative to MIDI Channel messages.
SYSEX-Events popular two styles:
SYSEX Events F0
This result in the F0 (the beginning of the message) being sent. Next, it is
This causes
In the case above, the end F7 of the message is not automatically sent. It must be explicitly included in
Most system advanced messages are very simple, and as a single package is sent. Started at F0, ending in F7. This is very easy to apply to the F0 form of
However, some system advanced messages are accustomed to real-time control devices. How to synthesize a system advanced message composed of a series of 'part' with an appropriate delay. Because, it is possible to interrupt one message in an event, there is a certain delay. This is a F7 form that can apply
In fact, F7 Sysex Event is accustomed to incorporating any_data in the MIDI stream. For example, a MIDI system real-time message (although it is not satisfactory).
example 1:
General Message: F0 7e 09 03 01 01 F7 (Sample Dump Request - Device 9, Sample Number 257)
The MIDI system real-time message "stop" uses F7 01 FC when "continues" with F7 01 FB.
Suppose: You want to stop an external device - drum, send a "stop", then "Continue" after 48 Delta-Time units. The complete DELTA-TEM event sequence is like this:
00 F7 01 FC 30 F7 01 FB
Meta event
Meta Events is used to represent track names, lyrics, prompts, etc., which are not sent as a MIDI message, but it is still a (useful) component of the MIDI file.
The basic form of Meta Events:
FF
One byte describes the type of meta-event. Possible range is 00-7f. Not all values are in this range, but the program can cope with unexpected values and diagnose this length and ignore the expected data part.
The length of the stressed data. This is a variable length (number). 0 is a valid
0 or more byte data.
META EVENTS FF 00 02 SS SS Voice
This is an optional event that can only be generated in the first TRACK and before non-zero. In the format 2 file, this is used to identify each Track, if ignored, this serial number is represented by the order of TRACK. .
In format 1 file, this event can only be generated in the first track.
SS SS SEQUENCE NUMBER, 16 BIT BINARY FF 01
This event is used to comment TRACK text. Independent 8-bit data (other ASCII text) is also allowed.
This event is a copyright notice expressed by ASCII text. This is the form of formula "(c) 1850 J.strauss" This event is used for the first Track, the first event.
FF 03
Voice or TRACK name. FF 04
Describe the instrument used by this Track. This detailed description (this) MIDI CHANNEL is in (this) the instrument used in Track. FF 05
Song lyrics. Usually every syllable has its own lyrics, at this time, the lyrics will be sang. FF 06
Usually used in the first TRACK of format 0 or format 1. Mark meaningful points (such as "Psalm 1") FF 07
It is used to show what happened on the stage. Such as: "The curtain is rising", "exits, stand left", etc. FF 201 CC MIDI CHANNEL Prefix Associated MIDI CHANNEL with Meta-Events and Sysex-Events. Until the next
CC MIDI CHANNEL 1-16 Range: 00-0F FF 2F 00 TRACK End
This event is necessary. It is used to sweep out the defined length. Its essential information is this track is a loop or connects to another track. FF 51 03 TT TT TT Terminal
This setting of the 1/4 note is indicated by subtle. This means changing a unit length of Delta-Time. (Note 1) If it is not pointed, the default speed is 120 shots / min. This is equivalent to TTTTTT = 500,000.
TT TT TT new beat, represents 1/4 note 24-bit binary number FF 54 05 HH mm SS FR FF SMTPE offset
An optional event describes the SMTPE time at which TRACK begins. This event must occur before non-zero delta-time and before the first event. In format 1, this event must be in the first Track (The Tempo Map).
HH MM SS FR Hour / minute / sec / frame with SMTPE format. This must be consistent with the message MIDI TIME Code Quarter Frame (details, time coding must be introduced)
FF FRACTIONAL FRAME, IN HUNDRETH'S OF A FRAME
FF 58 04 NN DD CC BB Terminal
The form of a beam marker: NN / 2 ^ DD as: 6/8 with nn = 6, DD = 3 is represented. This parameter CC is the number of Ticks representing the metronome of each MIDI clock.
Typically 24 MIDI clocks are one 1/4 note. However, some software allows users to set this value themselves. Parameter BB Definition: 24 MIDI Clock (This "General" (indicated) 1/4 note) number of 1/32 notes.
Nn beat mark, molecule
DD beam marks, denominates (DD times) of 2 (DD). Example: A denominator 4 is represented by DD = 2.
CC's number of Ticks per MIDI clock beam.
The number of 1/32 notes in 24 MIDI clocks (8 is standard).
FF 59 02 SF Mi Tone Symbol
Tone symbols, indicating the sign of the upgrade or decaying value, high-key or minor. 0 indicates that C is adjusted, the negative number indicates "decline", and the positive number indicates "promotion".
SF upgrade or decision value -7 = 7 promotion 0 = C adjustment 7 = 7
Mi 0 = high-key 1 = small adjustment
FF 7F
This is in the MIDI file with system advanced events. This event is used in the MIDI file to represent the description of the manufacturer sequencer.
8-bit binary
FootNotes
Note 1
In this case
MIDI_MODES.HTML Contents Midi_Control_change.html Midi_Channel_Mode.html
Please note this disclaimer
Translation: zj_zyq e_mail: zj_zyq@163.com December 28, 2002