MIDI Timing Concepts

 Explanation of Absolute and Relative Time Examples of MIDI Time Code in a Sequence
 MIDI Timing Clock Studio design using SMPTE/MIDI Time Code
 Different types of Time Code Related Terms

The first concept that needs to be understood is the difference between absolute and relative time. MIDI Time Code and SMPTE Time Code are representations of absolute time in that they follow hours, minutes and seconds just like your watch. Absolute time is always the same and you cannot speed it up or slow it down. Relative time is a reference to a musical piece that has an inner tempo. A composition may take three minutes to perform at a tempo of 80 bpm (beats per minute), but would take only a minute and a half if the tempo was increased to 160 bpm. An advanced MIDI sequencer is able to work with both absolute time and relative time and make adjustments when there are changes in the relative time of a composition.

In the chart below the upper line represents absolute time and includes an example of 17 seconds of time. Both MIDI Time Code and SMPTE Time Code may be used to represent absolute time which is fixed and may not be moved. Following the absolute time line are examples of repeated quarter notes at 3 different tempos (relative time). Notice that 2 measures have passed at 4 seconds with a tempo of 120 bps, but it would take 8 seconds for the same two measures at a tempo of 60 bpm and 16 seconds for the same two measures at a tempo of 30 bpm.

return to the menu

MIDI Timing Clock (MIDI Sync) is a status byte (F8) that is sent 24 times per quarter note for note resolution. Advanced sequencers will also subdivided each MIDI clock twenty times for a resolution of 480 times per quarter note. Standard - 24 PPQ. Professional - 480 PPQ. If the tempo changes, the speed of the MIDI Timing Clock will pass at a faster rate, but the number of status bytes (F8) per quarter note will stay the same.


 An F8 status byte is a system real time message that is used in a MIDI sequence to connect all the different rhythm values. The image above is a simple sequence consisting of quarter notes in the 1st measure, half notes in the 2nd measure, a whole note in the 3rd measure, followed by eighth-notes and sixteenth notes in the 4th and 5th measure, and finally a whole note in the last measure.

To the left is a graph depicting the same information in an event listing. Notice that the first number represents the measure, followed by the beat and finally the F8 timing clock resolution. In the first three measures each note starts exactly on the beat which corresponds to a timing clock reference of 0. Notice at the 4th measure that the timing clock has changed to values of 240. Remember that 480 times is the total for each quarter note and the 240 value is an eight note. In measure 5, the value changes to 120 which now represents the sixteenth note.

If the tempo of this sequence was changed to a different number, the numbers and values on these two charts would not change. What would change is the location of the notes in respect to absolute time. The value of the new tempo would map out a new chart for placement along the MIDI Time Code.

Now we will look at what MIDI Time Code and SMPTE Time Code have in common (absolute time) and how it is used in conjunction with MIDI Timing Clock (relative time).

return to the menu

A Time Code is an electrical or digital signal that gives a common timing reference for syncing MIDI devices with other electronic devices. The evolution of timing references has changed dramatically since the beginning of MIDI, from the use of click track, PPQ Clocks, FSK Clocks, to the more sophisticated use of SMPTE Time Code and MIDI Time Code.

SMPTE Time Code (Society of Motion Picture and Television Engineers) Was originally developed by NASA to sync computers together. SMPTE is a digitally encoded labeling system that strips a tape with an exact timing reference. It is a 1200 Hz modulated square wave that uses a biphase modulation to encode the signal on a tape. SMPTE is used to sync video with music, audio and sound effects. It may be used with a multi-track tape recorder and a synchronizer to sync a MIDI sequence with the tape or to sync two multi-track tape recorders. It is important to remember that a SMPTE Time Code signal is made up of digital words that contain 80 bits. These bits are used to represent the type of SMPTE signal, the actual location which includes hours, minutes, seconds, and frames, as well as user bits for dates and reel numbers. This digital number is converted to an audio tone so that it may be recorded on to an analog tape.

There are two different ways to record a SMPTE Time Code on to a tape. LTC Time Code (Longitudinal Time Code) is SMPTE Time Code encoded on one of the audio tracks or in-between the audio tracks of a video tape. This type of time code needs to be running in order to be read. A window burn is used on a working copy of a tape with LTC in order to address the code in slow or paused position. VITC Time Code (Vertical Interval Time Code) is SMPTE Time Code encoded on the Video signal in the Interval between frames. This allows for the use of SMPTE at very slow speeds without the need of a window burn or the loss of an audio track.

There are four different SMPTE formats in the standard. Each format refers to the number of frames per second. In film there are 24 frames which corresponds to the number of pictures per second. In European film and video the number of frames per second is 25. In the United States the original black and white TV programs ran at exactly 30 frames per second. This changed with the advent of color to run at 29.97 frames per second. In order to compensate for this discrepancy, there is a SMPTE format called "drop frame" at 30 frames per second. There are exactly 30 frames for every second, except two frames are dropped at the beginning of every minute, except at minutes 0, 10, 20, 30, 40 and 50. A total of 108 frames are dropped for each minute to adjust to the 29.97 frames per second. The standard that is used for most applications is "30 drop frame" and listed below are some examples.

   The number to the left represents a specific moment in time. The number represents 1 hour, 6 minutes, 12 seconds, 9 frames and 6 bits. There are 80 bits for every frame.
 The number to the right represents 23 hours, 59 minutes, 59 seconds, 29 frames, and 79 bits. By adding one more bit to this number would change the number to 24 hours.  

When MIDI was invented there was no specific data for synchronizing with SMPTE Time Code. If a musician was trying to use MIDI sequences to synchronize with a video tape they needed a sync device. Song Position Pointer is a System Common status byte F2, that is generated every six MIDI clocks. It is used as a reference to find a location in a song by counting the Song Position Pointer total and diving by 16 (4 per quarter note in a 4/4 time signature) to find the measure. A Tempo Map is used by a sequencer to change tempo at certain locations in a sequence. In order to synchronize with Song Position Pointer, a sync device is used to decide tempo and tempo changes in a song and the amount of measures in a song, using SPP and tempo map. The sync device can then figure out the amount of SMPTE time that passes at certain "hits". This was a very complicated way of synchronizing a MIDI sequence to a video tape, so in 1987, MIDI Time Code, was added to the MIDI specification in order to have a direct link of MIDI with SMPTE Time Code.

return to the menu

MIDI Time Code is a digital conversion of the SMPTE Time Code that allows MIDI devices to lock to the SMPTE Time Code in real time. Every frame of the SMPTE Time Code is broken down into 4 frames of MIDI Time Code with an average of 120 times a second. There are System Common Quarter - Frame messages which are used when the system is running and System Exclusive Full Messages to address any location.

MIDI Time Code Quarter Frame Messages (QFM) are used when a system is running. It takes a total of 8 QFM to address one SMPTE Frame. That means that SMPTE is updated every two frames. Each QFM starts with the F1 Status byte, followed by a Data byte were the first nibble will be 0 through 7 followed by a nibble that is the actual number.

F1 - MIDI Time Code Quarter Frame Address - Status Byte   nx - Data Byte

n= First nibble - 0 - Frame count LS nibble

n= First nibble - 1 - Frame count MS nibble

n= First nibble - 2 - Seconds count LS nibble

n= First nibble - 3 - Seconds count MS nibble

n= First nibble - 4 - Minutes count LS nibble

n= First nibble - 5 - Minutes count MS nibble

n= First nibble - 6 - Hours count LS nibble

n= First nibble - 7 - Hours count MS nibble and SMPTE Type

x= Second nibble - Actual number of the Time Code 0 through 9

 The relationship between the SMPTE time code numbers and MIDI time code quarter frame message is listed in the example below.

 0  1  2  1
 F1 70  F1 61  F1 51  F1 46  F1 32  F1 25 F1 11  F1 02 

Example of MIDI Time Code in a MIDI Sequencer

 In the example to the right are red arrows pointing to specific MIDI time code data in a sequencer track. The upper right arrow is pointing to a specific absolute time number of 1 hour, 3 minutes, 7 seconds and 8 frames. Below this arrow is an arrow pointing to the music that is being played at this location.

The arrow on the left is pointing to an offset number. Offset is a way of setting the MTC time at a certain number to begin a sequence or cue.


 Here is an event listing of the notes and the arrows are pointing to an exact moment in time. In the top arrows the note D2 is played in measure 39, beat 1, with a MIDI clock resolution of 70. This note occurs at 1 hour, 1 minute, 22 seconds, 6 frames and 51 bit resolution.


In the lower arrows the note C2 is played in measure 48, beat 1, with a MIDI clock resolution of 220. The time reference of this note is 1 hour, 1 minute, 38 seconds, 29 frames, and 34 bit resolution.


It is important to remember that if the tempo of the music changed, the time code numbers would change, but the value and placement of the notes would stay the same. The next two example clearly show the relationship of the MIDI time code with the MIDI timing clock.

 There are red arrows in the diagram to the right that are locating a highlighted note in this MIDI sequence at measure 5, beat 2. The tempo for this sequence is set at 220 bpm and the time code (upper right arrow indicates that the note will start at 4 seconds, 19 frames and 74 bits and will end at 5 seconds, 13 frames and 79 bits.
 This example is the exact same sequence as above with the tempo slowed down to 110 bps. Again the same note at measure 5, beat 2 is highlighted, but with the slower tempo the time code numbers have changed. The note will first start at 9 seconds, 9 frames and 66 bits and end at 10 seconds, 27 frames and 78 bits.
 The highlighted note would start 4 seconds, 19 frames, and 72 bits later in the second example with the tempo cut in half. The duration of the highlighted note in the second example would be for 1 second, 18 frames and 12 bits, while the duration of the highlighted note in the first example would only be 0 seconds, 24 frames and 5 bits. The use of MIDI Time Code in a sequencer allows the user to make changes with the tempo of a composition and all the timing information is automatically updated to follow the new tempo marking. With the use of MIDI Time Code to sync up to SMPTE Time Code, there is no need for a sync device and synchronization with Song Position Pointer

return to the menu

Studio design using SMPTE/MIDI Time Code
Related Terms

Exploring MIDI Home
What is MIDI?
MIDI Connections Java Enabled
MIDI Connections Non-Java
Understanding Decimal Binary & Hexadecimal
The MIDI Language
Types of Data Transmitted through MIDI
MIDI Channels and Modes
MIDI Controllers
General MIDI
Standard MIDI Files
Using MIDI on a Web Site
Applications that use MIDI
Audio vs. MIDI Files
MIDI Timing Concepts
Author Info and Comments