The MIDI time code is 32 bits long, of which 24 are used, while 8 bits are unused and always zero. Because the full-time code messages require that the most significant bits of each byte are zero (valid MIDI data bytes), there are really only 28 available bits and 4 spare bits.
Like most audiovisual timecodes such as SMPTE time code, it encodes only time of day, repeating each 24 hours. Time is given in units of hours, minutes, seconds, and frames. There may be 24, 25, or 30 frames per second.
Unlike most other timecodes, the components are encoded in straight binary, not binary-coded decimal.
Each component is assigned one byte:
When there is a jump in the time code, a single full-time code is sent to synchronize attached equipment. This takes the form of a special global system exclusive message:
The manufacturer ID of 7F indicates a real-time universal message, the channel of 7F indicates it is a global broadcast. The following ID of 01 identifies this is a time code type message, and the second 01 indicates it is a full-time code message. The 4 bytes of time code follow. Although MIDI is generally little-endian, the 4 time code bytes follow in big-endian order, followed by a F7 "end of exclusive" byte.
After a jump, the time clock stops until the first following quarter-frame message is received.
When the time is running continuously, the 32-bit time code is broken into 8 4-bit pieces, and one piece is transmitted each quarter frame. I.e. 96—120 times per second, depending on the frame rate. Since it takes eight quarter frames for a complete time code message, the complete SMPTE time is updated every two frames. A quarter-frame message consists of a status byte of 0xF1, followed by a single 7-bit data value: 3 bits to identify the piece, and 4 bits of partial time code. When time is running forward, the piece numbers increment from 0–7; with the time that piece 0 is transmitted is the coded instant, and the remaining pieces are transmitted later.
If the MIDI data stream is being rewound, the piece numbers count backward. Again, piece 0 is transmitted at the coded moment.
The time code is divided little-endian as follows:
"SMPTE & MTC (MIDI Time Code)". www.soundonsound.com. Retrieved 2024-11-29. https://www.soundonsound.com/techniques/smpte-mtc-midi-time-code ↩
"MIDI Time Code and MIDI Clock Explained". dummies. Retrieved 2024-11-29. https://www.dummies.com/article/technology/software/music-recording-software/general-music-recording-software/midi-time-code-and-midi-clock-explained-179973/ ↩
Schütte, Benjamin; Bachmann, Cristina. "Timecode Standards". archive.steinberg.help. Retrieved 2024-11-29. https://archive.steinberg.help/nuendo/v10/en/cubase_nuendo/topics/synchronization/synchronization_timecode_standards_c.html ↩