How can I get Logic Pro X to receive and obey a Song Position Pointer message?

I am trying to use the midi npm library to do this:

const midi = require('midi');

const output = new midi.Output();


var tmi =  setInterval(function() {  
}, 100);

I have set up a Piano instrument to use port testoutput but it does nothing at all.

  • 2
    Can you explain more what kind of message you want Logic to obey? -- In general, a System Exclusive (sysex) message is a non-portable device-specific message. It largely depends on the specific System Exclusive message you have in mind to understand if it even makes sense to ask if Logic is capable of obeying it. -- The F2 08 08 message in your example is a Song Position Pointer message, not a System Exclusive message. Do you want Logic to obey a Song Position Pointer message?
    – Bavi_H
    May 9, 2022 at 9:14
  • I’m not an expert but I don’t think logic will respond to sysex. If it can, it will be documented. May 9, 2022 at 9:38
  • @Bavi_H Yes. I want it to obey a Song Position Pointer message (to move forward in song). My understanding was that this was a SysEx message.
    – jlarson
    May 9, 2022 at 17:42
  • ..or really to skip to a particular location (including going backward)
    – jlarson
    May 9, 2022 at 17:48

2 Answers 2


I can't find specific documentation if Logic Pro responds to Song Position Pointer messages and I don't have a Mac or Logic Pro to test with. If you are willing to continue testing, here are some ideas.

Make sure Logic Pro currently has a song at least a few measures long, then try sending a single Song Position Pointer message like this:

var position = 16; // in sixteenth notes (0 to 16383)

var byte_1 = position & 0x7F; // low 7 bits
var byte_2 = position >> 7;   // high 7 bits

output.sendMessage([0xF2, byte_1, byte_2]);

If that has no effect, you might be able to use the Controller Assignments Expert View to assign an incoming Song Position Pointer message to move the playhead. Try the following steps:

  1. Go to Logic Pro > Preferences > Advanced and select the Enable Complete Features checkbox (or in earlier versions, the Show Advanced Tools checkbox).

  2. Go to Logic Pro > Control Surfaces > Controller Assignments (or press Command-K), then click the Expert View button.

  3. In the Zone list, choose No Zone.
    In the Mode list, choose No Mode.
    Below the Control/Parameter list, click the + button to add a new assignment.

  4. Fill in the following values:

Controller Assignment Parameter

  Control Name: Song Position Pointer
         Label: [blank]
    Flip Group: none (0)
     Exclusive: unchecked
         Class: Global
     Parameter: Playhead (Beats)

MIDI Input Message

          Input: Any
   Value Change: F2 Lo7 Hi7
  Touch/Release: [blank]

OSC Message Paths



   Min/Max: 0 127 or 0 16383 [? see note a]
    Format: Unsigned
  Multiply: 0.25 or 1.00 [? see note b]
      Mode: Direct

a. I'm unsure if the Min/Max values are for each of the Lo7 and Hi7 bytes individually (use 0 127), or for the combined value of the Lo7 and Hi7 bytes (use 0 16383).

b. I'm unsure if the "Playhead (Beats)" parameter is expecting values in units of quarter notes (use 0.25) or in units of sixteenth notes (use 1.00). The MIDI specifications describe the Song Position Pointer is in units of sixteenth notes called "MIDI beats", so in the context of changing the song position, "beats" could possibly mean "sixteenth notes".


I am trying to do this as well - this is may help:

Unfortunately, Logic doesn't respond to the SPP F2 message.

I can confirm Bavi's suggestion works for Relative settings when you include setting the Part field to Bars and the Format to Sign Magnitude:

Class=Global Parameter=Playhead (Beats) Part=Bar ValueChange=BF 6B Lo7 Format=Sign Magnitude Mode=Relative.

Unfortunately, the Direct setting appears to have a bug, and consistently jumps to -8 1 1 1.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.