The MIDI SMPTE offset meta message specifies an offset for the starting point of a MIDI track from the start of a sequence in terms of SMPTE time (hours:minutes:seconds:frames:subframes).
This message belongs to the category of MIDI meta messages. Since this is a meta message the MIDI event that carries this message may exist in MIDI files, but it is never sent over MIDI ports to a MIDI device.
This message consists of eight bytes of data. The first byte is the status byte 0xFF, which shows that this is a meta message. The second byte is the meta message type 0x54, which shows that this is the SMPTE offset meta message. The third byte is 0x05, which shows that there are five remaining bytes. The fourth byte specifies the hours of the SMPTE time and the frame rate as described below. The fifth, sixth, seventh, and eighth bytes specify the minutes, seconds, frames, and sub-frames of the SMPTE time.
The hours byte has the binary format "0sshhhhh". The top bit is zero as it is reserved according to the MIDI time code specifications. The two bits ss define the frame rate in frames per second. If those bits are "00" (0 decimal), the frame rate is 24 frames per second. If those bits are "01" (1 decimal), the frame rate is 25 frames per second. If the bits are "10" (2 decimal), the frame rate is "drop 30" or 29.97 frames per second. If the top two bits are "11", then the frame rate is 30 frames per second. The five hhhhh bits define the hours of the SMPTE time.
Obviously, the hour byte of the SMPTE time takes values between 0 and 23. The minute and second bytes of the SMPTE time take values between 0 and 59. The frame byte takes values which range depends on the frame rate specified in the hour byte. For example, if the frame rate is 24 frames per second, then the frame byte takes values between 0 and 23. The sub-frame byte takes values between 0-99 as there are always 100 sub-frames in a frame.
The following is an example of a MIDI SMPTE offset meta message.
0xFF 0x54 0x05 0x01 0x00 0x00 0x00 0x00
The status byte is 0xFF which means that this is a meta message. The meta message type is 0x54 which means that this is the SMPTE offset meta message. The third byte shows that 5 bytes follow. The fourth byte is 0x01 which has the binary form 00000001 and hence the frame rate is "00" or 24 frames per second. The SMPTE hours are 1. The remaining bytes define the SMPTE minutes, seconds, frames, and sub-frames as 0. Thus this message means that the track should start 1 hour after the beginning of the sequence.