Am I right that JUCE doesn’t implement MIDI bank select message?
In the MIDI spec, Bank Select is named as controller (CC) #0, so that would be no problem to do with JUCE. It’s not a special type of MIDI message (in the way that, say, “Song Select” is).
Here’s an excerpt from the spec:
- Bank Select
Controller number zero (with 32 as the LSB) is defined as the bank select. The bank select function is used in some synthesizers in conjunction with the MIDI Program Change message to expand the number of different instrument sounds which may be specified (the Program Change message alone allows selection of one of 128 possible program numbers). The additional sounds are selected by preceding the Program Change message with a Control Change message which specifies a new value for Controller zero and Controller 32, allowing 16,384 banks of 128 sound each.
Since the MIDI specification does not describe the manner in which a synthesizer’s banks are to be mapped to Bank Select messages, there is no standard way for a Bank Select message to select a specific synthesizer bank. Some manufacturers, such as Roland (with “GS”) and Yamaha (with “XG”), have adopted their own practices to assure some standardization within their own product lines.
Just to be clear(er), a Bank Select message is actually two CC messages back to back. CC#0 for the MSB, and CC#32 for the LSB.
For example, on a Korg Kronos, you select Program Bank INT-C (with the unit’s GM Bank Map setting) by sending:
I suspect the inclusion of a Bank Select LSB on CC#32 varies by manufacturer and/or model. While the spec allows for 2^14 (16,384) banks, there are plenty of synths that only offer 2^7 (128) banks.
Uh-oh. Why on earth would any manufacturer want to put anything in the MSB (063) if the “bank C” is the 002? If that bank switching is dependent on manufacturer and the model of the hardware, how can a software be designed to support bank switching properly so that user has any idea how to actually switch the bank on the hardware unit?
I can’t tell you why they do that. Korg’s typically have two different modes of bank switching based on a “Bank Map” setting. Here is a table from the Kronos manual illustrating it (showing the MSB.LSB):
In either mode, selecting a bank of GM Drums requires MSB 120.
But that just goes to show that each manufacturer does it differently. If you design software that is supposed to work with Korgs, then you have to take it into account.
(That’s why software that works with popular hardware devices often has a “Device Type” setting where you select “Korg”, it works one way, you select “Yamaha”, it works another way, you select “Roland”, it works a third way, etc. PITA. )
Hmm, I guess I’ll skip the bank support for now since it’s not critical. Patch change features goes pretty much all the way in this case, at least for now.