SOLVED: MIDI issues - is there some secret MIDI off message?

Well that is what it seems like. Each time I send a Controller 0 with a value of 1 (or 2 or 3), and then a patch number…it turns off MIDI reception for changing songs in a song list. If I restart C3 and I can then select (via MIDI) songs in a setlist again (albeit only up to 128) ??

This is weird! So even though C3 lists songs with greater than 128 patch numbers, it does not seem like it actually recognises the bank command.

Any ideas, anyone?

Thanks

Hey Dennis,

yes, Cantabile does recognize bank commands - you’ll need to have the right binding in place: “Input port - - Program Change (Banked) --> Set List - Load Song by Program (Instant)” should do the trick. I assume you have this in place.

The one thing I noticed that is probably your problem: you are sending Controller 0 - which means bank select MSB, i.e. by sending a value of 1 on CC 0, you are addressing bank 128, not bank 1. So a program change of 55 after this would mean that you are trying to select program 16439 (equalling 1.0.55 in MSB.LSB notation equalling 128.55 in simplified Cantabile notation).

If you want to select progam 55 in your second bank (bank 1), you’ll need to send CC 32 with a value of 1 and leave CC 0 at its initial value of 0.

You can also get Cantabile back to receiving program changes without restarting by simply sending it cc0 with a value of 0…

In short: use CC 32 instead of CC 0.

To unravel the mystery behind this for the un-initiated:

Normal MIDI values can only address a range of 0…127 - this is due to the fact that MIDI values use only 7 bits (the 8th bit of every MIDI byte is reserved to identify commands like “note on”). So only 128 notes, 127 velocities (plus “zero”), etc …

To allow for a broader range of values than just 0…127, the MIDI standard splits up some values in pairs of MSB (most significant bits) and LSB (least significant bits) - this means 14 bits or values 0…16.383. To get the total value, simply multiply MSB with 128, thenn add LSB (easier for us humans than shifting MSB 7 bits to the left :wink: )

This allows more fine-grained control of some values. These values are sent via two CC commands, normally sending the MSB value first (rough value setting), then the LSB value for the fine-tuning. But of course, as long as the MSB doesn’t change, sending LSB only for small adjustments works as well.

Typical pairs of such controls are

  • Modulation MSB (CC1) / LSB (CC33)
  • Volume MSB (CC7) / LSB (CC39)
  • Expression MSB (CC11) / LSB (CC 43)
  • Bank Select MSB (CC 0) / LSB (CC32)

Notice something? LSB CC # is always MSB + 32 :nerd_face:

Now we normally don’t worry about this, since we mostly just use the MSB part of our volume, expression or modulation commands - which covers (almost) the full range of its values and as such is good enough if you can live with 128 “steps” in your volume, expression or modulation controls and don’t need more fine-grained control. Actually, I’m not aware of many synths, master keyboards or VST instruments that actually use the LSB values of volume, expression or modulation - but Cantabile can deal with them in its bindings (see "Controller (Fine)) and in its MIDI filters (Controller-Coarse vs. Controller-Fine).

So using only the MSB part is actually a reasonable way to deal with volume, expression, etc - but it’s unfortunately not the right way for addressing banks, since by using MSB only, you are jumping through your banks in 128 bank leaps…

So this is why for bank select commands, you need to use the LSB value (i.e. CC 32) - you’ll only need to use CC 0 when you want to address banks above # 127 (which means more than 16.384 entries in your setlist).

End of lecture :wink:

Cheers,

Torsten

6 Likes

…and then there are the exceptions to that rule with synth keyboards which reverse the MSB and LSB controllers. (Like my Kawai K5000s does!) Fortunately, the bindings can actually deal with that!!! :slight_smile:

Terry

1 Like

Thanks Torsten, but I had already tried that, well at least I THINK that is what the unrealbook midi command is sending. I am trying to find out from the deve exactly what the MIDI boxes are doing exactly, because it seems that if I enter the 1 as either msb0 or lsb 32 values it still locks up C3.

Also, your first par mentions

Now, I do have the last part set up, however the first part, I am nto quite sure where this is as I cannot find this syntax (Program Change Banked &gt ;Setlist) in either Options or in the bindings area, or indeed anywhere else. Could you help out here please?

Haha, yes I was already aware of the econd half of the post, but as the thread title had MIDI in it I agree it was a good opportunity to set out the explanation! And a good one it was too :slight_smile:

This is what I mean:

You need such a binding in your background rack with the correct MIDI port on the left where the PCs come in.

Now on “locking up” C3: does Cantabile really “lock up”, i.e. no more reaction to user input, or is it just not reacting to program changes anymore? If it’s not reacting to program changes anymore, then it seems your MIDI box is creating sending bank selects for a bank that doesn’t have any entries. If your bank is set to 128 and there are no entries in your setlist with numbers of 128.1, 128.2, 128,3, then Cantabile can’t load any songs. So that’s what’s happening when you send CC 0 with a value of 1 - Cantabile will need songs with numbers 128.x

When you send a CC 32 value of 1 (and leave CC 0 at 0), then Cantabile will be in bank 1 - so if there are entries in your set list that have numbers like 1.1, 1.2, … etc, Cantabile should load these. I use this all the time between LivePrompter and Cantabile: my “normal” songs are in banks 0 and 1, and my “admin songs” for sound check or break music are in bank 99 - works like a charm!

Can you get a MIDI dump of the traffic from your unrealbook to Cantabile? Simply create a route from the unrealbook MIDI input to a dummy rack and open a MIDI monitor on this route in Cantabile. Then post a screen shot of the output. Also, can you post a screen shot of your set list with the numbers displayed?

I bet we can help you solve this!

Cheers,

Torsten

3 Likes

Thanks Torsten - I’ll come to that in a mo, here is another apparent anomaly - I managed to get C3 to change to bank 1 and select songs, however when I now reselect bank 0 song 1, it onyl goes back to song one in bank 2! not bank 1…seems it gets locked in whatever the last bank it was sent.

oops, yes I do have this (program change banked) set in the background rack

Now, When I enter lsb as 2 (ie trying to select the second set of songs eg patch 261- or 2:5) using exactly the same midi string except changing the lsb to 32 02 (unrealbook is using HEX btw hahaha) C3 does not react!

And further, if I then enter the data to clear,(ie MSB 0, LSB 0, Patch 0) then instead of going to song 1, it goes to song one BANK 1 (instead of bank 0) and stays in that bank unless I restart C3

you know that 32 is 20 in hex?

haha, yep. Well I think I finally have it working phew!! I change the view to MSB/LSB/Patch separate, which mde it a bit easier. thanks for your help. The tip re using JUST lsb did the trick. I come from synths that all use a combo of MSB/LSB (Roland Korg Yamaha et al) messages for upper banks :slight_smile: so just using lsb was not where I was thinking haha!

1 Like

If you need to clarify what MIDI events Cantabile is receiving the easiest way is with the console logger. Go to Options → Diagnostics and turn on Console Logger and Log MIDI In Events. You’ll get a second console window where any incoming MIDI events will be logged and you can see what’s going on. This is better than the MIDI monitor for this kind of work because it’s logging at a lower level. Note however anything logged here will be raw zero based values (ie: program numbers won’t be one based even if you have this selected in Cantabile’s option).

3 Likes

Just to clarify: I use MSB/LSB combinations all the time between LivePrompter and Cantabile. Whenever LivePrompter sends out a program change outside the currently selected bank (it keeps track!), it sends a sequence of CC 0 with the MSB, then CC 32 with the LSB of the bank, then the program change. So for a program like 255.3 (Bank 255, program 3), it would send CC 0:1, CC32:127, PC 2 (zero based) - and this should also work in your configuration.

Similarly for your patch 261 (i.e. 0.2.5) the hex string would be “B0 00 00 B0 20 02 C0 04” (assuming you are using MIDI channel 1). This should work for you with unrealbook - can you test this?

One other important thing: yes, by definition in the MIDI standard, a bank select stays active until a new one is received, so any program changes received following a bank select for bank 2 will also be interpreted as belonging to bank 2. So once you have sent “B0 00 00 B0 20 02”, any subsequent program change without bank selects will be interpreted as belonging to bank 2. That’s the way the MIDI standard works.

This may be why Cantabile seemed “locked up” once you had sent bank selects for banks > 0: just check your unrealbook songs 1-128: do they only send program changes or do they also contain “B0 00 00 B0 20 00” as well to set the bank back to 0? If not, Cantabile will interpret the program changes contained within these songs as belonging to the bank you selected previously - you’ll need to add the bank select commands for bank 0 to these songs, then things should work out nicely!

Cheers,

Torsten

2 Likes

Thanks guys, as I wrote above it is sorted, again as I wrote above Torstens tip about using only CC 32 was the clincher.

I have programmed many MSB/LSB instrument definitions along with drum notes/maps and controller maps, so I am aware of those details. I was approaching this from the (in my view) standard MIDI uppper bank system the so called “normal” method, where a combination of msb/lsb selects upper banks…

There is also the Controller 0 method which is what is happening here I believe. Where CC0 (or MSB) is always fixed at 0 and the lsb selects the bank. Ketron also uses this system :slight_smile: The only other method was controller 100, but THAT went out with the ark hahaha!

So anyhooo, thanks again for your help Torsten, and later Brad. BTW Nice tip re the MIDI event logger, I will use that in the future

3 Likes