Sending MSB/LSB values with program change messages

I’m using an SH-4D as a companion to my Tracker. Selecting a patch on the SH-4D by just sending a program change is easy enough using value 128 (“Prg Chg”) of the MIDI instrument parameters, and then setting the value with the track effects. This works for the currently selected synth engine of the SH-4D.

But to change between synth engines of the SH-4D, or to select patch values higher than 128, I need to send MSB/LSB values alongside the program change (see here).

The Tracker supports these MIDI parameters:

100 RPNL
101 RPNM

I don’t know which of these the SH-4D expects to receive, so I just tried a few things. But I’m also not sure how I can get the Tracker to send a combination parameters as one MIDI message in the first place.

So for instance, if I want to send MSB 88 / LSB 64 / PrgChg 20 to a MIDI device, how do I do this? I figured:

Track 1 Track 2
C4 M01 a88 b64 C4 M01 c20 ----
Track 1 Track 2
Note is C4 (I thought maybe sending note is the actual trigger) Note is C4
MIDI channel is 1 MIDI channel is 1
FX1 is set to MIDI CC A, which is 101 RPNM, value 88 FX1 is set to MIDI CC C, which is 128 Pgr Chg
FX2 is set to MIDI CC B, which is 100 RPNL, value 64

But since these are effects on different tracks, I’m not sure if they are in fact being sent as one single message.

Then of course there’s the offset to deal with, so for instance Prg Chg 20 actually selects patch 21 on the SH-4D. But when I change the values above to accommodate for possible offsets, or change the RPNM/RPNL to NRPNM/NRPNL, I still can’t get it to work.

Anyone had any luck with all of this? :pray:t4:

1 Like

I personally don’t have a SH-4D so i can’t help you but there’s other users with the SH-4D here that might be able to help you:

1 Like

Found it!

So apparently CC 0 and CC 32 are MSB and LSB respectively, but in the instrument parameters on the Tracker they are both labelled ‘Bank’. So when you first send these two, and then send a program change, you can switch between the different synth engines. Like so:

Track 1 Track 2
--- M01 a88 b74 --- M01 c20 ----
MIDI channel is 1 MIDI channel is 1
FX1 is set to MIDI CC A, which is 0 Bank, value 88 FX1 is set to MIDI CC C, which is 128 Prg Chg, value 20
FX2 is set to MIDI CC B, which is 32 Bank, value 74

For the SH-4D, this selects patch 20 of the wavetable synth engine.



Thanks for posting this. I’m trying to figure out how to send PCM messages via the Tracker and it seems like you have the answer, only my understanding of MIDI is pretty basic. I understand the general logic (status bytes, data bytes , 0’s and 1’s) but I’m confused when you speak of MSB and LSB. This seems to be the key.

If i wanted to send a PCM message via MIDI channel 1 to change to program, say, 20, what is the protocol?

I see you are using a combination of two of the MIDI CC [A-F] FX commands to achieve this but I’m lost in the granularity of your math.

Thank you!