MIDI Song Position Pointer message

The MIDI song position pointer message tells a MIDI device to cue to a point in the MIDI sequence to be ready to play.

This message belongs to the category of MIDI system common messages.

This message consists of three bytes of data. The first byte is the status byte and has a hexadecimal value of 0xF2 signifying that this is a song position pointer message. Two bytes follow the status byte. These two bytes are combined in a 14-bit value to show the position in the song to cue to. The top bit of each of the two bytes is not used. Thus, the value of the position to cue to is between 0x0000 and 0x3FFF. The position represents the MIDI beat, where a sequence always starts on beat zero and each beat is a 16th note. Thus, the device will cue to a specific 16th note.

Each 16th note can easily be interpreted into time as the MIDI device should know the number of MIDI ticks per quarter note and the length of a MIDI tick (see Time division (of a MIDI file) for more information).

The following is an example of a MIDI song position pointer message.

0xF2 0x00 0x08

The status byte 0xF2 shows that this is a song position pointer message. 0x00 and 0x08 have the binary representations 00000000 and 00001000 and so they form the 14-bit value 00000000001000, which is 8 decimal. 8 sixteenth notes is 2 quarter notes, but since the first quarter note occurs at beat zero, this message will prompt the MIDI device to cue to the third quarter note at beat 2.

See also:
Musical Instrument Digital Interface (MIDI)

Comments

Great explanation of SPP. The easiest way for me to remember is that the second data byte is just multiples of 128 sixteenths, which the first data byte represents the amount sixteenths less than 127.

My formula to figure measure/beat is ( (data2*128) + (data1) / 16) + 1.

The +1 is so your solution will, at the minimum, be 1, because there is no measure 0.

Add new comment

Filtered HTML

  • Freelinking helps you easily create HTML links. Links take the form of [[indicator:target|Title]]. By default (no indicator): Click to view a local node.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.
Image CAPTCHA
Enter the characters shown in the image.