Magazine Archive

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

Software Support

Hints, Tips & News From The World Of Music Software


STEINBERG



MIDI BANK CHANGE

We are getting an increasing number of calls from users complaining about the Bank Change control in Cubase not working. The users are those with Roland keyboards. So, why is Roland equipment causing a problem when the rest of the world seems OK? Well, Roland's interpretation of the MIDI Bank Change command is a little novel.

Once upon a time MIDI controller 0 was undefined — after a brief spell as the aftertouch control for Yamaha DX7s, an assignment that was soon changed, controller 0 became the MIDI Bank Change message. This was a much-needed means allowing the 128 program change limit of MIDI to be expanded many times. The way MIDI Bank Change works is like this. Firstly a Bank Change message is sent, followed by a Program Change. The Program Change is an integral part of the complete Bank Change message. We have been asked why we send it — well, it's because it is part of the specification. It's the Bank Change section that is of most interest as it is actually two controller messages back-to-back; the aforementioned controller 0, and its counterpart controller 32. These two messages together carry the number that is the new bank to be selected, and it is the way that the desired bank number is split across the two controllers that is causing the anomaly with Roland equipment.

We will look first at the controller 32 part. This is called the LSB (Least Significant Byte) of the controller message. Like all controller data it can have a value of 0 to 127. But what if you need to send a number that is greater than 127? Well, there is no way to describe numbers greater than 127 here, so the excess is carried over to controller 0, the MSB (Most Significant Byte), which gets set to 1, and the LSB then gets reset to 0, ready to start again. If you consider this as a continuous sequence, you can imagine the LSB (controller 32) continuously cycling upwards from 0 to 127, and each time it tries to reach 128 the MSB gets increased by 1 and the LSB is reset to 0. Simple.

At the end of this upwards spiral you will find that the MSB itself can only get as far as 127, and that's your lot. This does mean that the total number of banks is limited to 128x128 = 16,384.

Remember that each of these banks could contain 128 patches, which adds up to over 2 million patches. The eagle-eyed among you will have noticed that the Bank Select button in Cubase only goes up to 9,999 banks. In the name of common decency, and with a view to self-restraint, we limited you to just 1.28 million patches. In a world where self-restraint can be hard to find (ie. an Akai S1000 and six S1100EX expanders), someone somewhere is going to be so upset that they will write a 4-page letter to us on the matter. Actually, it's already happened, and it was six A4 pages of closely typed text. Cubase users everywhere can take heart from the fact that Steinberg promise to provide access to the full 2 million patch change combinations as soon as there exists a single MIDI device that can actually deal with them.

Anyway, back to the Roland issue. What Roland have done is to use the controller 0 part of the Bank Change message as if it were the LSB. That means that if you send Bank 0 from Cubase, the Roland instrument does nothing if it's already in Bank 0, as it's looking for changes in the MSB and totally ignoring the place where the action is. The only way the number, in the part of the message that Roland are looking at, is going to change is when the LSB has run out of space. All is not lost, however — as soon as the MSB changes to 1, ie. the LSB goes from 0 to 127 and then plus one, the Roland will change from bank 0 to bank 1. So, when you wish to use a MIDI Bank Changes with Roland keyboards and Cubase, just multiply the bank number you want by 128 and enter that number instead.



DR. T's KCS



Last month we ended by looking at the use of XX and XL events to stop sequences. Consider now the following use of XL events:

Seq 1, Song 3

MSR-BT: ST EVNT TIME CH TYP NOTE VEL DUR
1-1: 1 1 0 ST 2 0 99
5-1: 1 2 1536 ST 3 0 99
15-1: 1 3 3840 XL 2
15-1: 1 4 0 XL 3
17-1: 1 5 768 ST A 0 1
17-1: 1 6 0 ST B 0 1
17-1: 1 7 0 DE


Sequence 2 is four bars long and sequence 3 is eight bars; sequence 2 starts at bar 1 and we allow it to cycle infinitely by putting 99 under the DUR column. Sequence 3 starts four bars later, and at bar 17 sequences A and B are started together. The interesting stuff happens at bar 15; sequence 2 continues playing back until bar 17 but sequence 3 continues until the end of bar 20. Here's what's going on:

Bar 1 Bar 5 Bar 9 Bar 13 * Bar 17 Bar 21
Seq 2... Seq 2... Seq 2... Seq 2... *...
Seq 3... ... Seq 3... *... ...
XL Seq 2
XL Seq 3
Seq A... ...
Seq B... ...


It should be apparent that placing the XL events anywhere from the start of bar 13 to the end of 17 will achieve the desired effect.

The MS/US (Mute Sequence/Unmute Sequence) commands are very useful, but a couple of points need to be made. First, consider this hi-hat pattern:

Seq A Hats

MSR-BT: ST EVNT TIME CH TYP NOTE VEL DUR
1-1: 1 1 0 10 ON F#2 114 20
1-1: 49 2 48 10 ON F#2 108 20
1-1: 73 3 24 10 ON F#2 60 18
1-2: 1 4 24 10 ON F#2 77 20
1-2: 49 5 48 10 ON F#2 78 20
1-3: 1 6 48 10 ON F#2 100 20
1-3: 49 7 48 10 ON F#2 81 20
1-4: 1 8 48 10 ON F#2 80 20
1-4: 49 9 48 10 ON F#2 110 2


etc.

The idea is to start this sequence off, but have it muted from the beginning so that it can be unmuted at a later point. If you try this...

Seq 1 MuteCTL1

MSR-BT: ST EVNT TIME CH TYP NOTE VEL DUR
2-1: 1 1 384 MS A
2-1: 1 2 0 ST A 0 1
2-1: 1 3 0 DE


...it won't work! The reason is that the mute command is issued before the sequence has been started. This, however, would work...

Seq 1 MuteCTL2

MSR-BT: ST EVNT TIME CH TYP NOTE VEL DUR
2-1: 1 1 384 ST A 0 1
2-1: 1 2 0 MS A
2-1: 1 3 0 DE


...but it introduces a problem of its own. Look back at the hi-hat sequence and you'll notice that the first hi-hat beat is on the very first clockstep of sequence A. Now consider the logic of our second control sequence example: sequence A is started and then muted immediately. What actually happens is that sequence A starts by playing the first event in its edit list, but the mute command in sequence 1 then 'chokes off' sequence A. Since a note is in the process of being played, an audible hiccup will occur as the system plays and then mutes the data. To get around the problem, you'll need to do this:

Seq 1 MuteCTRL

MSR-BT: ST EVNT TIME CH TYP NOTE VEL DUR
1-4: 96 1 383 ST A 0 1
1-4: 96 2 0 MS A
1-4: 96 3 0 DE


Unfortunately, this creates a problem of its own — we'll look at this, and the solution, next month.


More from these topics


Browse by Topic:

Computing

Sequencing



Previous Article in this issue

Amiga Notes


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

 

Sound On Sound - Apr 1993

Donated by: Russ Deval

Feature

Previous article in this issue:

> Amiga Notes


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 January 2022
Issues donated this month: 2

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

Funds donated this month: £137.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