Magazine Archive

Home -> Magazines -> Issues -> Articles in this issue -> View

Bank Managing

The MIDI Bank Select Message Explained

Article from Sound On Sound, September 1993


Martin Russ digs deep into his patch memories to bring you an explanation of the mysteries of MIDI Bank Select...

The MIDI Specification is not fixed. It continually evolves in response to the needs of users. One of the more recent additions seems to be the cause of more than a few problems, even though it is designed to cure a fundamental weakness — Bank Selects.

HISTORY



When MIDI was first proposed, the DX7's 32-patch memory capacity was considered to be the height of luxury — how times change! So it probably made perfect sense to provide a Program Change Message which could access any of 128 different patches. After all, the Prophet 600, the first MIDI-equipped synthesizer, only had 100 patch memories — and some cynics suggested that there weren't that many variations on 'synth brass' sounds!

The trouble with adding lots of memories was that manufacturers came unstuck if they exceeded 128. OK — so you could get at all the patch memories from the front panel, but over MIDI you could only get at 128. What started as a minor bottleneck for expensive instruments quickly became a major headache for lots of users — and unfortunately MIDI did not come to the rescue until several innovative manufacturers had worked out their own ways of getting around the problem. When the 'official' MIDI Bank Select message was finally announced, it introduced a new way of working with MIDI Controllers, and this is probably why many people seem to encounter difficulties in understanding what is happening. Rather than rush into looking at Banks, let's start by looking at the basic Program Change, then some of the ways to access more than 128 patch memories using it, before taking a closer look at the Bank Select message.

PROGRAM CHANGE



Selecting patches (or Programs, in MIDI-speak) was so important that a whole message type was reserved for just this one purpose. Unfortunately, the message was defined as being just two bytes: the usual Status Byte, followed by a single byte containing the information. With just one byte to play with, MIDI restricts you to values from 0 to 127, which is why the 128-patch limit exists.

In the case of the Program Change message, the status byte $Cn indicates that the byte which follows is the value of the program to be selected. The $ sign is used here to indicate that the byte is shown in hexadecimal format, and the lower case 'n' is used to indicate that you may use any value from 0 to 15 to represent the 16 MIDI channels. So a Program Change Message of $C2 $00 would select the first patch memory of a MIDI device on MIDI channel 3. Remember that the MIDI Channel is always one higher than the value of 'n' that you see in the status byte.

Notice that I said 'the first patch memory' in the above example. Unfortunately, manufacturers use many different ways of numbering patches, and so although the MIDI value used is always the same, it could select patch 0, or patch 1, or patch A1, or even patch 11! There are many different ways of allocating numbers to patches:

0-127 Patch Number = MIDI Program Number
1-128 Patch Number = MIDI Program Number + 1
A1-D16 Patches numbered in groups of 16
A1-H8 Patches numbered in groups of 8
11-88 Patches numbered in base 8 (octal)
00-7F Patches numbered in Hexadecimal (base 16)
There are other variations too!


One of the most useful methods of extending the usefulness of the 128 programs came from rackmount effects units. Because early digital effects processors only had a limited number of possible effects, manufacturers provided a way to map incoming Program Changes to the effects patches — the Program Change Map. The idea was that you could assign specific effects to Programs, so that choosing Program 11 on a Keyboard would select Patch 11 and a suitable effects patch — not necessarily patch 11. With some reverb and chorus patches, you could manually program up the sort of functionality that is now associated with workstations and synthesizers with built-in effects units.

The simplest form of a Program Change map is fitted to almost every MIDI instrument! It is where each Program maps to the same Patch. If an instrument has less than 128 patches then there is a map which might be considered to be even simpler — where each Program maps to one patch. A little bit more complex is the idea of modulo arithmetic, or 'wrapping round' — for example, suppose that the effects unit has only 8 patches (and numbered from 1 to 8). Sending Program Numbers from 0 to 7 will select the patches 1 to 8, but what does Program Number 9 select? It might be ignored, but more often it will select patch 1 again. Program 10 would select patch 2, Program 11 would give patch 3, and so on. The Program Number is divided by eight, and just the remainder is used to select the patch. There can be more than 8 patches — so, for 16 patches, you would just divide by 16 and again use the remainder.

Once the idea of a Program Change Map had been introduced, it was realised that you could also apply it to MIDI equipment where there were more than 128 patches available. You just needed to use the table to point to your favourite 128 patches, which could then be accessed using the Program Change Message. This reverses the original idea, where you map many Program Numbers to a smaller number of Patches, but the concept remains the same. Some manufacturers have even provided multiple Maps — although choosing between them usually requires the use of System Exclusive messages.

ALTERNATIVES



Program Change Maps require the user to fill in a table with 128 different values if all possible Program Change messages are to be dealt with. This can take quite a while and is rather tedious. Quite a lot of Maps seem to stay set to the factory default — usually 1-1, 2-2, 3-3 etc. An alternative way of allowing the user to get at more than 128 patches was to misuse an existing controller...

Just over 10 years ago, Oberheim were rather keen on their proprietary parallel interface instead of MIDI, and so they may have had less restraint in being creative with misusing it. The Oberheim Matrix 1000 uses a novel way of providing rapid access to a thousand different patches, using ordinary MIDI messages — and what's more, you can do it from almost any MIDI master keyboard! The secret lies in using two messages that would rarely coincide in normal use: the Modulation Controller followed by a Program Change message. From a keyboard you move the Mod Wheel to max, then send a Program Change to select the Bank Number, then move the Mod Wheel to zero and send a further Program Change to select the Patch in that Bank. If you have a sequencer which allows you to insert MIDI Controller events, you can also use MIDI Controller 31 to achieve the same effect, and it avoids any problems with sudden modulation if you change banks while notes are sounding. It turns out that the choice of Controller 31 is rather prophetic, as we shall see.

As to some example messages — let's look at setting up Patch 0, Bank 1 for a Matrix 1000 on MIDI Channel 1:

$B0 MIDI Controller 31 Message
$1F = 31 in decimal
$7F = 127 in decimal
$C0 MIDI Program Change = Bank Select
$01 Bank 1
$B0 MIDI Controller 31 Message
$1F = 31 in decimal
$00 = 0 in decimal
$C0 MIDI Program Change = Patch Select
$00 = Patch 0


Yamaha's SY77 used a completely different way of selecting banks of patches. In fact, it used two ways. In Normal mode, Program Changes from 0 to 63 select patches 1 to 64, and any other Program Changes will be ignored, provided you are just playing one voice. If you are using the SY77 as a multitimbral sound source, then Program Changes from 64 to 79 will select one of the 16 multitimbral setups, or Multis. Since an internal Multi can use any of the 192 on-board patches, you can thus select more than the basic 128 patches. In Direct mode, Program Changes from 0 to 116 select patches, whilst Program Changes from 117 to 127 select Voice Banks (Preset 1, Preset 2, Internal or Card) or Multis. For just voices, the Bank selection is followed by another Program Change message to choose the patch number. In the case of Multis, you must follow the Bank selection with a Program Change to select the Multi itself. This enables you to choose any of the 256 available patches. These two methods are not too straightforward, and the subsequently released SY99 implemented 'true' MIDI Bank Selects.

So, to select Internal Patch 1 on an SY77 in 'direct' mode on MIDI Channel 2, you might send:

$C2 Program Change for Bank
$7A = 122 = Internal Bank
$C2 Program Change for Patch
$00 = Patch 1


There are other examples, but these two illustrate some of the difficulties you might encounter in trying to use very different implementations of bank changing.

Before we look at the Bank Select message itself, we need to look at MIDI Controllers in a little more depth.

14-BIT CONTROLLERS



MIDI Controllers come in several varieties. Some act as switches for on and off controls — sustain pedals for example. Some act as 7-bit controllers with 128 different values — volume pedals, and even some slightly esoteric sustain pedals. But there are also 14-bit controllers, where detailed control is needed. Using 14 bits allows up to 16,384 different values, which is enough for most purposes — and in fact, very few manufacturers take advantage of 14-bit controllers. For volume pedals, 128 values is often too much precision, and you may well find that only 8 or 16 different volume settings are actually used. Modulation wheels often use all 128 possible values to give smooth transitions for vibrato, etc. A common use of 14-bit precision is the Pitch Bend Message, which is not a Controller at all!

You may be wondering how 7-bit and 14-bit Controllers manage to work together. The range (maximum to minimum values) of a MIDI Controller is normally thought of as being 0 to 127, which makes sense for a 7-bit Controller, but what about 14-bit Controllers? Where are those 16,000 values? What actually happens is that the 14-bit Controllers 'fill in' the gaps between the 7-bit values — so you get much finer resolution.

It's rather like a skyscraper — if you get in the lift for 'MIDI Towers', there are 128 floors, and you can quickly go from the ground floor (floor 0) to the top floor (floor 127). But if you want, you can also go up the stairs — and there are exactly 128 steps between floors. This means that you can ascend the skyscraper quickly in the lift, one floor at a time, or more slowly by climbing the stairs. So the 7-bit Controllers give coarse control, whilst the 14-bit Controllers allow much more precise adjustment.

Just as the lift and the stairs share the same floors, the 7- and 14-bit Controllers share messages. The first 32 MIDI Controllers appear to be 7-bit Controllers, but they are actually just the Most Significant part of a 14-bit Controller which uses another Controller number as the fine resolution part. Using computer-speak, the Most Significant Byte and Least Significant Byte are referred to by acronyms: MSB and LSB. The MSB Controllers can be used on their own as 7-bit Controllers, whilst the LSB Controllers just add 32 to the MSB Controller number — so Volume (MSB Controller number 7) can also be finely tweaked with LSB Controller number 39, if your equipment supports this feature.

As you might expect, the most important part of a Controller is sent first, then the least important part. This defines a general 14-bit Controller message:

$Bn
$controller number
$msb value
$Bn
$controller number+20
$lsb value


'Controller number+20' may look confusing at first, but remember that $20 is hexadecimal for 32.

If only the LSB part has changed, then only that part need be sent — this helps to keep the length of the messages shorter, since you are not always repeating the MSB part.

BANK SELECT



Of all the Controllers, number zero has long been 'undefined'. But Bank Select now occupies the Controller 0 slot — and also the corresponding Controller 32 slot. Unlike most of the other Controllers, Bank Selects are always sent as 14-bit values, and so are of the form:

$Bn
$00
$msb value
$Bn $20
$lsb value


For changing banks, it is reasonable to assume that only the LSB value is going to be used in the majority of cases! Anyone who has more than 128 banks of 128 patches needs to have a good memory for their 16,000-plus patches.

If you think back to the lift, floors and stairs analogy, you can see how the MSB and LSB values will change. As you climb the stairs, the 128th step is followed by the first floor, and the the initial step up from that floor. After another 128 steps you will arrive at the second floor — and so on all the way to the top. Each time you climb 128 steps, the floor number increases by one. Table 1 shows some examples.

Changing Banks is all very well, but what about the Program Change to select the Patch? Well, actually it has to follow the two Bank Select Controller messages, so they form an eight-byte message in total:

$Bn
$00
$msb Bank value
$Bn
$20
$lsb Bank value
$Cn
$Program number


If you do not send all eight bytes, then it will not be recognised as a valid Bank Select message, and nothing will happen. Trying to select Banks that are outside the range of an instrument will probably also produce disappointing results — so make sure that the MSB value is what you expect (normally zero for Banks 1 to 128). Notice also that Banks are numbered from 1 to 16,384, not 0 to 16,383 as you might expect. Now, 16,384 Banks of 128 patches is quite a formidable number of patches: 2,097,152. Whereas the 128 patch limit of the original MIDI Program Change message now looks a little short-sighted, this huge number of patches must surely be more than anyone is ever going to use seriously (dangerous words — just after I wrote this, the wonderful people at Steinberg technical support told me of some Cubase users who do use large Bank numbers!).

IN GENERAL...



Banks have further significance when you use General MIDI (GM). Roland's GS MIDI extension to GM and Gem's S2/S3 workstations both use the idea of variations of sounds being stored in different Banks. If a synthesizer module or expander does not respond to Bank Select messages, then it will only change to the patch set by the Program Change part of the eight-byte Bank Select message, whereas if Bank Selects are recognised, then a variation will be chosen. If defining how the basic 128 timbres should sound is difficult, imagine trying to cope with up to 16,384 variations on them!

If you only use a few basic pieces of MIDI equipment, then you may never have used Banks. But as the price of memory falls, manufacturers are going to be offering more and more patches, which inevitably means organising them into Banks. It isn't just the hardware that will be affected — Patch librarian programs will need to be able to cope with much larger sets of sounds, and Sequencer programs will need to be able to deal with Bank Select messages. Bank Selects give you another difficult technical question to ask when you next think about buying some software or hardware...

LIFTS, FLOORS & STAIRS

As you climb the stairs, the 128th step is followed by the first floor, and then the initial step up from that floor. After another 128 steps you will arrive at the second floor — and so on all the way to the top. Each time you climb 128 steps, the floor number increases by one. The steps are like the LSB values of a 14-bit Controller, whilst the floors are like the MSB values of a 14- or 7-bit Controller.


BANKS & PATCHES

MSB VALUE LSB VALUE BANK NUMBER FIRST PATCH LAST PATCH
$00 $00 1 0 127
$00 $01 2 128 255
$00 $7F 128 16,257 16,383
$01 $00 129 16,384 16,511
$01 $7F 255 32,512 32,639
$02 $00 256 32,640 32,767
$7F $7F 16384 2,097,024 2,097,151


TABLE 1: Banks and Patches. Here are some example values for the MSB and LSB values being used to select Banks. Also shown are the patches which are accessed — assuming that your patches are numbered consecutively!


OTHER BANK SELECTS

It may have escaped your attention, but the Bank numbers are not large enough to cope with the normal bank branch numbering scheme, which uses three sets of two digits:

12-34-56

The assumption thus has to be that changing a bank account from Barclays to Lloyds will never be possible with the assistance of MIDI.


More with this topic


Browse by Topic:

MIDI



Previous Article in this issue

Star Quality

Next article in this issue

Soundscape


Publisher: Sound On Sound - SOS Publications Ltd.
The contents of this magazine are re-published here with the kind permission of SOS Publications Ltd.


The current copyright owner/s of this content may differ from the originally published copyright notice.
More details on copyright ownership...

 

Sound On Sound - Sep 1993

Topic:

MIDI


Feature by Martin Russ

Previous article in this issue:

> Star Quality

Next article in this issue:

> Soundscape


Help Support The Things You Love

mu:zines is the result of thousands of hours of effort, and will require many thousands more going forward to reach our goals of getting all this content online.

If you value this resource, you can support this project - it really helps!

Donations for June 2024
Issues donated this month: 0

New issues that have been donated or scanned for us this month.

Funds donated this month: £0.00

All donations and support are gratefully appreciated - thank you.


Magazines Needed - Can You Help?

Do you have any of these magazine issues?

> See all issues we need

If so, and you can donate, lend or scan them to help complete our archive, please get in touch via the Contribute page - thanks!

Please Contribute to mu:zines by supplying magazines, scanning or donating funds. Thanks!

Monetary donations go towards site running costs, and the occasional coffee for me if there's anything left over!
muzines_logo_02

Small Print

Terms of usePrivacy