Goffredo Haus, editor
Fall 1995
© IEEE Computer Society Press.


System Common Messages

Table XIX

MTC Quarter Frame

This message is one part of the MIDI Time Code (MTC) specification and communicates the Frame, Seconds, Minutes and Hours Count in an 8-message sequence. See the MTC Detailed Specification below for a more detailed explanation.

Song Position Pointer

A sequencer's Song Position (SP) is the number of MIDI beats (1 beat = 6 MIDI clocks) that have elapsed from the start of the song and is used to begin playback of a sequence from a position other than the beginning of the song. It is normally set to 0 when the START button is pressed to start sequence playback from the very beginning. It is incremented every sixth MIDI clock until STOP is pressed. If CONTINUE is pressed, it continues to increment from its current value. The current Song Position can be communicated via the Song Position Pointer message and can be changed in a receiver by an incoming Song Position Pointer message. This message should be ignored if the receiver is not set to respond to incoming Real Time messages (MIDI Sync).
Song Position Pointer is always multiplied by 6 times the MIDI clocks (F8H). Thus the smallest Song Position change is 6 MIDI clocks, or 1/16 note. The result is then multiplied by the internal time base of the sequencer. Here is an example:

IF Song Position Pointer = 10 THEN

BEGIN
Multiply this times 6 MIDI clocks (10 X 6 = 60)
Multiply the result (60) times the sequencer time base.
IF the time base is 96 clocks per beat, THEN
{there are four internal clocks between each F8,
so the result is 240 (60 X 4 = 240)}
Set internal pointers to begin playback 240 clock tics into the sequence.
END;

The Start message (FAH), is treated by MIDl as if it were 8 command comprised of a Song Position Pointer value of 0 plus a continue message (FBH).
Since the Start message and the Continue message can be received while the sequencer has been stopped by a Stop message (FCH), the sequencer should be able to start quickly in response to a Start message, even if the sequencer is in the middle of a song.
Song Position Pointer messages should be ignored if the instrument is not in MIDI sync mode (see System Real Time messages section for details on MIDI sync).

Song Select

Specifies which song or sequence is to be played upon receipt of a Start message in sequencers and drum machines capable of holding multiple songs or sequences. This message should be ignored if the receiver is not set to respond to incoming Real Time messages (MIDI Sync).

Reception of Song Position and Song Select

When a device receives and recognizes a Song Position or Song Select message, it can take a relatively long time to implement the command. The receiver must continue to accept MIDI locks after a Start has beer received, and increment its song Position while it is computing and locating to the correct address in memory for playback. For example, if a Song Position Pointer message is received which contains a value of 4 (24 MIDI Clocks), and during the process of locating a Continue and 3 clocks are received, the device should start playing from the point in its intemal sequence corresponding to the 27th clock. If a Timing Clock message is missed while the receiver is dealing with Song Position, the receiver may not synchronize correctly. Song Position or Song Select messages may only be sent when the system is not playing.

Tune Request

Used with analog synthesizers to request that all oscillators be tuned.

EOX

Used as a flag to indicate the end of a System Exclusive transmission. A System Exclusive message starts with F0H and can continue for any number of bytes. The receiver will continue to wait for data until an EOX message (F7H) or any other non-Real Time status byte is received.
To avoid hanging a system, a transmitter should send a status byte immediately after the end of an Exclusive transmission so the receiver can return to normal operation. Although any Status Byte (except Real-Time) will end an exclusive message, an EOX should always be sent at the end of a System Exclusive message. Real time messages may be inserted between data bytes of an Exclusive message in order to maintain synchronization, and can not be used to terminate an exclusive message.


[Index | Main Paragraph ]