Program Change above value 127

4 posts / 0 new
Last post
Knob Twiddler
Knob Twiddler's picture
Program Change above value 127

Hi there,

Today I had some spare time and connected my Yamaha RM1x to my laptop with Reaper.

The idea was to sequence some softsynths with it and control some parameters. That worked out great and was a lot of fun.

The only time I had to use the laptopmouse, was for changing presets on the synths sometimes. I tried to configure the RM1x to send Program Change to the laptop but it isn't exactly made for that. You could send program change to other external gear but you need certain data (MSB/LSB ?) from the manual.

suddenly I remembered that my midikeybboard was able to send program change but only values 0 to 99 and the softsynth had a lot more presets.

So I grabbed my BCR2000 and prograamed a knob to send program change but also there it is limited to the midilimitation of 128 values.

But isn't it possible to reprogram it with BCRManager so it has much more values and I can skip to all the presets with it?

I am a total noob with hexcode but I guess there lies the solution? Can someone be so kind and tell me where and what I have to change in BCManager to get this done?

I also tried to program a knob to Pb, because I thought it is Program Bank select, but it seems it Pitch Bend.... :D

But maybe there is nothing above PC127? In the plugin there are banks too, but there is an options to select "all" banks and in that case you see a list of "all" presets, but I can not skip further as preset 127 or 128.

Many thanx in advance!




Mark van den Berg
Mark van den Berg's picture

Hi Jan,

There are two types of MIDI Control Change message that can supplement the program number (0-127) of a Program Change message:
CC 0 = Bank Select MSB
CC 32 = Bank Select LSB
Each of these messages specifies a value 0-127, so the total number of different programs is 128 x 128 x 128 = 2097152.

The idea is to send the CC 0 message first, then the CC 32 message and finally the PC message.
But of course each individual device can respond in any way it likes: some devices ignore any LSB message, and (IIRC) there are even devices which ignore any MSB messages but do listen to LSB messages.
That's why I've come up with the "MIDI program changer" window in MIDI Tools and BC Manager: this allows you to easily test the behavior of any receiving device.

The BCF2000 and BCR2000 provide great support for these Bank Select prefixes. See BC MIDI Implementation.pdf sections 15.2 (buttons) and 16.2 (encoders/faders).
In BC Manager you simply select Type = Program Change on the element's "Standard output" tab, and add any Bank MSB and/or Bank LSB prefix messages.

Hope this helps,

Knob Twiddler
Knob Twiddler's picture

Ok, I am trying this out with your info above.

I made it work on my RM1x sequencer and am able now to send PC messages and bank messages to the softsynths. You have to program those messages somewhere in your sequence and once done you can change the values pretty easy to skip between all the presets and banks.

Anyway, this causes interruptions in the sequenced notes, mostly when it are long sounds like strings or pads but with some softsynths you can hear it in every preset. Now you can delete the PC message when you found where you are looking for but the behaviour on the BCR2000 is much smoother because you send the message in real time and it is not there when your sequence starts again.

So as you told me I programmed another knob to CC0 and gave it value 5-15 just as a test. Moving that one first and the PC knob afterwxards did what I was looking for without strange artifacs. I don't get the LSB thing yet but it seems not neccesarry here.

Now I will try to program one of the topencoders so I can skip through the banks by pushing it in incrementsteps and changing PC by turning it. With the help of the sections in the implementation you mentioned, I should be able to. Will keep you updated.

Knob Twiddler
Knob Twiddler's picture

Value for the knob is PC/Ch1/Par:Off/value1:off/value2:-/ABS/ID/on

Value for the pushbutton is: CC/Ch1/Par:0/v1:17/v2:0/inc/1/on

17 is only my value because I have 18 banks (17+0), I guess I could have taken values 18 & 1 instead also.

Thanks Mark!