Digital Sound & Music: Concepts, Applications, & Science, Chapter 6, last updated 6/25/2013
is the sub-ID number for MIDI Time Code. This tells the receiving device
that the bytes that follow are MIDI Time Code syntax as opposed to MIDI Machine
Control, MIDI Show Control, or other commands. There are a few different MIDI Time
Code sub ID numbers. 01 is used for full SMPTE messages and for SMPTE user bits
messages. 04 is used for a MIDI Cueing message that includes a SMPTE time along with
values for markers such as Punch In/Out and Start/Stop points. 05 is used for real-time
cuing messages. These messages have all the marker values but use the quarter-frame
format for the time code.
is a number used to define the type of message within the sub-ID 1 families.
For example, there are two types of Full Messages that use 01 for sub-ID 1. A value of 01
for sub-ID 2 in a Full Message would indicate a Full Time Code Message whereas 02
would indicate a User Bits Message.
is a byte that carries both the hours value as well as the frame rate. Since there are
only 24 hours in a day, the hours value can be encoded using the five least significant
bits, while the next two greater significant bits are used for the frame rate. With those two
bits you can indicate four different frame rates (24, 25, 29.97, 30). As this is a data byte,
the most significant bit stays at 0.
represents the minutes value 0059.
represents the seconds value 0059.
fr represents the frame value 0029.
is the End of Systems Exclusive byte indicating the end of the message.
For example, to send a message that sets the current timeline location of every device in the
system to 01:30:35:20 in 30 frames/second format, the hexadecimal message would be:
F0 7F 7F 01 01 61 1E 23 14 F7
Once the full message has been transmitted, the time code is sent in quarter-frame format.
Quarter-frame messages are much smaller than full messages. This is less demanding of the
system since only two bytes rather than ten bytes have to be parsed at a time. Quarter frame
messages use the 0xF1 status byte and one data byte with the high nibble indicating the message
type and the low nibble indicating the value of the given time field. There are eight message
types, two for each time field. Each field is separated into a least significant nibble and a most
0 = Frame count LS
1 = Frame count MS
2 = Seconds count LS
3 = Seconds count MS
4 = Minutes count LS
5 = Minutes count MS
6 = Hours count LS
7 = Hours count MS and SMPTE frame rate