[linux-audio-dev] MIDI... know how to do bank/patch changes on yamaha Motif Rack?

Rui Nuno Capela rncbc at rncbc.org
Mon Jul 17 09:01:30 UTC 2006

On Mon, July 17, 2006 03:58, Stephen Cameron wrote:
> --- Rui Nuno Capela <rncbc at rncbc.org> wrote:
> [...]
>> You're probably missing the required Bank Select control changes (MSB
>> CC#=0 and LSB CC#=32) which should precede the proper Program Change
>> message. This is standard MIDI specification, not specific to your
>> device, and its perfectly stated on the manual page you mentioned.
> I'm sure the manual is fine for someone who already knows how
> these things work.  For me, it left something to be desired. A few
> examples would have been a great help.
> For the benefit of, well, of probably nobody, maybe
> myself when I forget this and have to figure it out again, I will record
> what I found out anyway.
> The Motif has a couple parameters under the Utility/MIDI menu on the
> front panel.  There's a setting for the channel on which to recieve basic
> messages.  Set this to 1.  (That means it will recieve them on channel 0,
> not 1, oddly enough.)  There are settings for BankChange and Patch Change.
> Make sure they are "on".
> The manual fails to mention what the Bank Change message is
> (probably because it is "standard MIDI stuff.")  It is 0xB0
> (or 0xBn, where n is the channel the device receives basic
> messages on.)
> It requires TWO bank select commands to select a bank.  One
> to set the MSB, and one to set the LSB.  You can't set them both with one
> command (which is what I was trying to do that didn't work.)
> 0xB0 0x00 0xf3  // 0xB0 0x00 means "set bank MSB"  0xf3 is the
> // value to set it to.
> 0xB0 0x20 0x01  // 0xB0 0x20 means "set bank LSB" 0x01 is the
> // value to set it to.
> 0xC0 0x01       // Patch change to preset 0x01 of the previously
> // selected bank MSB/LSB.
> That's what a halfway decent explanation looks like, provided
> my current understanding is correct. (It's correct enough that my program
> works now.)

Looking into the page of the manual, you can see on the Bank Select table
all the available BANK SEL and PROG CHANGE values for your device.

The correct sequences would be:

1. BANK SEL MSB (Control Change #0)

   0xB0 0x00 <msb>

2. BANK SEL LSB (Control Change #32):

   0xB0 0x20 <lsb>


   0xC0 <pc>

Where the <msb>, <lsb> and <pc> values should be taken from the table, in
manual p.46, columns MSB (HEX), LSB (HEX) and Program No. respectively.

You seem to had it almost there, but 0xf3 doesn't look like a valid value
for <msb>. It's not part of the available bank selections nor its a valid
MIDI data value. Every MIDI data value must be in the 0x00 to 0x7f range

As an example, this looks like being correct to select the 2nd program
patch of the "Normal Voice", "Preset 2" bank:

   0xB0 0x00 0x3f 0xB0 0x20 0x01 0xC0 0x01

or, using running-status:

   0xB0 0x00 0x3f 0x20 0x01 0xC0 0x01

Note that I'm using MIDI channel address 0 in this example. Depending on
your receive channel, you're ought to try on channel 1, and the above
sequence should be:

   0xB1 0x00 0x3f 0xB1 0x20 0x01 0xC1 0x01

Hope this got a bit clearer.

rncbc aka Rui Nuno Capela
rncbc at rncbc.org

More information about the Linux-audio-dev mailing list