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:

98 NRPNL
99 NRPNM
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:

https://backstage.polyend.com/search?q=sh4d

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 ----
Explanation
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.

2 Likes

Hi,

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!

From what I know, you can do a lot of very specific MIDI messaging using MSB and LSB. To send bank/program changes to instruments that have hundreds of patches scattered across numerous banks, you need those to first select the bank and then select the patch within that bank. But for doing just a simple program change, MSB and LSB might not even be necessary.

First you need to select a MIDI channel as an instrument on your Tracker.

Then on the Instrument Parameters page, you can select 6 different MIDI Control Change parameters. For a program change, you’ll need CC 128.

With the program change set to for example CC A on MIDI channel 1, you can now send the actual value using the FX lanes. So first select CC A:

And then set the FX value to 20 to select patch 20.

For sending sophisticated program changes, you also need to set the “0 Bank” (MSB) and “32 Bank” (LSB) parameters before sending the program change. You need to look up the values for the bank change in the MIDI implementation of your external instrument, they probably differ between instruments. But you can send the values one after the other using the FX lane, the last --- M01 a20 actually changing the patch.

1 Like

Thank you for this! Being able to chain midi commands together in a string may have been what I was missing. I “discovered” the midi parameters in the Instrument Parameters menu a few days after i wrote this post, which cleared things upo for me and was Able to start to send program changes to one of my devicees but still struggling with the other ones. Your reply has revived my enthusiasm, thank you.

1 Like