How MTC Quarter-Frame Messages Distribute Timecode
MIDI Time Code (MTC) provides a way to transmit SMPTE timecode data across standard MIDI connections without overwhelming the protocol's 31.25 kbaud bandwidth. Instead of sending an entire timecode address in a single data-heavy transmission, MTC divides a complete SMPTE timecode value—representing hours, minutes, seconds, and frames—into eight individual pieces. These pieces are delivered as short, two-byte "quarter-frame" MIDI messages spaced evenly across two full frames of video or audio playback, allowing continuous synchronization with minimal data overhead.
The Quarter-Frame Message Structure
Each quarter-frame message is a MIDI System Common message consisting of exactly two bytes:
- Status Byte (
0xF1): Identifies the message as an MTC Quarter Frame transmission. - Data Byte (
0nnndddd): Carries both a routing identifier and the actual timecode payload:- The most significant bit is always
0(as required for standard MIDI data bytes). - The next three bits (
nnn) specify the sequence position or message type, running from0to7. - The remaining four bits (
dddd) carry a nibble (a 4-bit segment) of the SMPTE timecode data.
- The most significant bit is always
The 8-Burst Distribution Breakdown
A complete SMPTE timecode requires 32 bits to fully specify the frame rate, hours (0–23), minutes (0–59), seconds (0–59), and frames (0–29). The quarter-frame scheme delivers these 32 bits across eight sequential bursts:
- Message 0: Frame Count (Bits 0–3, low nibble)
- Message 1: Frame Count (Bit 4, high nibble; upper bits are padded with zeros)
- Message 2: Seconds (Bits 0–3, low nibble)
- Message 3: Seconds (Bits 4–5, high nibble)
- Message 4: Minutes (Bits 0–3, low nibble)
- Message 5: Minutes (Bits 4–5, high nibble)
- Message 6: Hours (Bits 0–3, low nibble)
- Message 7: Hours (Bit 4, high nibble) combined with the Time Code Type (Bits 5–6, representing 24 fps, 25 fps, 30 fps drop-frame, or 30 fps non-drop)
Transmission Timing and Reassembly
As the name implies, quarter-frame messages are sent four times per timecode frame (at the start of each quarter of a frame). For example, at a standard rate of 30 frames per second, a frame lasts approximately 33.3 milliseconds; therefore, a quarter-frame message is sent roughly every 8.33 milliseconds.
Because it takes eight sequential messages to transmit the entire set of nibbles, two full timecode frames must elapse before the receiving device receives a complete, updated SMPTE location.
During playback, the receiving equipment does not wait for a full eight-message cycle to track time. Instead, it uses the arrival of each individual quarter-frame message as a high-resolution clock pulse, incrementing its internal counter and interpolating between full-frame readouts. Once Message 7 arrives, the receiver verifies the reconstructed hours, minutes, seconds, and frame number, adjusting for the two-frame offset that occurred during the transmission cycle.