Hello. I am trying to send bank / program changes to a Montage over midi. How do Bank Select (BnH, 00H,20H) and Program Change (CnH) relate to the numbers on the performance list , i.e. Performances 1 – 1920? Thanks.
There's a chart in the data list which shows single-part or multi-part. The single-part bank switching will switch individual PARTs so you would send the bank+PC message to the MIDI channel that matches that PART - and only the PART will change.
The Multi-PART MSB/LSB+PC values will map to performances. You can pick out a few performances to see how they map using Montage.
Use [CATEGORY SEARCH] to load some random performance.
Then touch the touch-screen area of the performance name (large text in the [PERFORMANCE] (HOME) screen).
Then press (touchscreen) "Property".
This will show the MSB+LSB+PC of the performance.
MSB=63 (decimal)
LSB=64-79 (decimal) is like a page of performances
PC=0-127 (decimal) are the number of performances per page.
Note that when you click on "Property" it shows "Program Change No." which is one greater ("one based") than the PC you use in MIDI ("zero based"). So subtract one from the Program Change No. value to use it as a PC in MIDI if you are using hex values and direct entry. Some software is also one-based. You'll have to resolve this on your own. It's easy enough - you'll either be off by one or not.
Preset performance 1 = MSB 63 LSB 64 PC 0
Preset performance 2 = MSB 63 LSB 64 PC 1
...
Preset performance 128 = MSB 63 LSB 64 PC 127
Preset performance 129 = MSB 63 LSB 65 PC 0
Preset performance 130 = MSB 63 LSB 65 PC 1
...
Preset performance 256 = MSB 63 LSB 65 PC 127
and so on
Here's a more direct answer with the formulaic method to arrive at each value:
Division below is integer math (drop all after decimal point)
MSB=63, LSB=64 + ((Performance1thru1920number -1) / 128), PC = (Performance1thru1920number -1) Mod 128
"Mod 128" meaning divide by 128 and determine the remainder. Fill in the remainder for PC.
I loaded up performance # 535 and ran through the math.
MSB=63, LSB=64 + ((535-1)/128) = 64 + (534/128) = 64 + 4 = 68, PC = (535-1) Mod 128 = 534 Mod 128 = 22
This matches exactly what the "property" screen shows - remembering to add one to PC since Montage shows PC as one-based.
MSB=63 LSB = 68 PC (Number as one-based) = 23
Under normal circumstances you would send these "multi-part" MSB/LSB+PC messages to MIDI channel 1.
Montage can filter (ignore) Bank/PC. Be sure the receive switches are turned on.
Current Yamaha Synthesizers: Montage Classic 7, Motif XF6, S90XS, MO6, EX5R
In MIDI (Bn 00 20) the capital letter "H" denotes the values are in hexadecimal - (removing makes this easier to read and you do not have to enter anything for that H, it's just informing you that the value will be a hex number).
Bn = translates to a CONTROL CHANGE message (B); the letter "n" is the MIDI Channel number.
In hexadecimal (based on 16), you can express the MIDI channel with a single character 0-F
In hexadecimal you count from zero to fifteen as follows: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
In MIDI, Channel 1 is expressed as 0 in hex, Channel 2 is expressed as 1 in hex... Channel 16 is expressed as F in hex... (yes, they are off by one, because MIDI actually uses 0)
So a message that begins "B0" (spoken "bee - zero) would be a "Control Change message on MIDI Channel 1"
A message that begins "BF" (spoken "bee - eff) would be a "Control Change message on MIDI channel 16"
00 = is the MSB or Most Significant Byte, and means that cc00 given a value will give us the first of two locators for what is called Bank Select
20 = is the LSB or Least Significant Byte, and means cc32 given a value will give us the second locator for Bank Select.
These Bank Select messages, MSB/LSB, are expressed with numbers between 0 and 127, which in hexadecimal are expressed as 00-7F... for what we normally say as 001-128.
A little history, the original "Bank" of sounds for MIDI protocol was 128. This was glorious back in the day, most early synths with Presets had about 32 programs at the time, if that. Well, Program Change was the first thing MIDI that was outgrown... so they implemented a system where there could be 128 programs maximum in a Bank, but with 128 MSB values combined with 128 LSB values - suddenly MIDI had grown to 16,384 possible banks of 128 programs... and for the next 30 plus years we have not outgrown this system (yet).
So each Manufacturer can setup the MSB and LSB Numbers as they see fit, with one or two exceptions... Bank MSB/LSB 000/000 and 127/000 are reserved for the "General MIDI" Normal and Drum Banks, respectively.
Now, depending on what software you are using to address the Montage, you may find several different systems for entering these BANK SELECT messages. We'll explain below.
Once the Bank has been selected, the message is followed by an individual Program Change message (Cn). The letter "C" represents the type of message, PROGRAM CHANGE. Again, the letter "n" denotes the single character MIDI channel expressed in hex 0-F. In any Bank a maximum of 128 Programs can be listed, in hexadecimal this 00-7F. (Spoken "zero - zero" through "seven - eff")
Convert Decimal to Hexadecimal and vice versa
There are charts that let you look it up, but I'm a fan of using the brain: there are two characters, read them separately always.
Multiply the first hex character times 16, and then add the second.
10H = 16 because 1 times 16, plus zero
20H = 32 because 2 times 16, plus zero
The Part that is tricky in hex is the letters A, B, C, D, E, F. Which are 10, 11, 12, 13, 14, 15
0A in hex = 10 in decimal
0B in hex is 11
0C in hex is 12
0D in hex is 13
0E in hex is 14
0F in hex is 15
10 in hex is 16
So quick 3C?
3 x 16 = 48, plus 12 = 60
7F in hex is converted by taking the first digit, 7, and multiplying it by 16 = 112, then add the F which is 15. 7F = 127
Going the other way... 127 divided by 16 gives you 7 with 15 left over.... 15 you know is expressed with an F.
Finally:
Most software programs know that hexadecimal is for geeks, not musicians. So there are simpler ways to enter Bank Select and Program Change that do not involve you knowing hexadecimal numbers.
If you want to recall the Montage Performance "CFX + FM EP" you can look up its MSB, LSB and Program Change numbers.
From the PERFORMANCE HOME screen
Touch the Performance title box to invoke the pop-in menu
Touch "Property"
Listed will be the MSB 63, the LSB 64, and the Program Change 001
I mentioned, exactly how this is entered, can vary depending on the software you are using.
In some, you have to enter a Control Change event, CC00 with a value of 63, a second Control Change event, CC32 with a value of 64, followed by the Program Change number.
In others you have to take the MSB number, multiply it by 128, then add the LSB... This gives a single Bank Number like 8,128... follwed by the Program Change.
You don't mention what type of device you are using to send this message, but this should get you started.
The Montage has different MSB/LSB and PC for Single and Multi Part Performances... this means with different messages you can recall entire 16 Part Performances, and with a different MSB/LSB, PC message you can recall a single Part on any channel as you may require... making this a very flexible system. Your Performance data can be given its own numbers as each LIVE SET slot is assigned its own MSB/LSB and PC.
Hope that helps.
I was kinda hoping there'd be a bulk dump of performances and parts into Cubase with pre-assigned program numbers. And when I do execute program changes from Cubase, I can't get any smooth morphing from one performance to another. Instead, I get the classic hiccup glitch like on my vintage synths. Any work around for that? And is it possible to bulk dump performance and part program numbers into Cubase, instead of one at a time?
I'm reading your other comment on another thread about Cubase issues.
In some situations, Montage Connect is supposed to handle this kind of thing. However, if I were to try to get all the bank switching correct and recorded in Cubase, I would:
1) If any performances I am using are presets, I would [STORE] user copies of these presets so I can change the zone settings
2) For each performance (now all user) I would turn on Zone control for PART 1 and setup zone transmit to the MIDI channel matching the PART and also make sure Bank (MSB/LSB) plus Program No. (PC) are turned on for zone transmit. Using "properties" of the performance, I would copy down the MSB/LSB+PC No. and enter in that information - verbatim (no adjustment to PC) into the Zone control transmit. This I would do for all performances I intend to record with Cubase.
3) Be sure to [STORE] after making the edits.
Having done this, when you switch between these user performances Montage will transmit the bank+pc change and cubase will record this for later playback. Later playback will send this to Montage (MIDI channel 1). I am sure SSS will be respected using external MIDI control although I have not tested this.
Morphing, in terms of super-knob, should be working fine assuming you do not filter SysEx (if superknob is set to sysex). Superknob can be CC - which is "easier" to avoid filtering. There's another thread about splitting off superknob into its own recorded track so you can split this from the rest of your MIDI data. This may be an interesting exercise to setup if only to validate superknob is being recorded.
Current Yamaha Synthesizers: Montage Classic 7, Motif XF6, S90XS, MO6, EX5R
My problem isn't with the superknob, as I remember that was working ok. The problem was getting those user bank programs that I set up to morph properly in playback from Cubase. No matter what I did, they still hiccupped and glitched. I just updated from Cubase 7.5, do you think something in Cubase Pro 9 may change that?
I also think Yamaha should have a template or a bulk dump that saves the user from all that painful tedious work. It should be able to install a user bank with all the tedious entry that we have to do by hand now. I did try what you suggested above about two months ago. But maybe it's the inherent "all notes off" message during bank/prog change that needs filtering. Yes, I tried that too but it had no effect on the glitch. I may have to do some work in 7.5 because I still use a few 32 bit plugs. So I'm anxious to hear if it works in Cubase Pro 9. I may have a chance to try it in the next few days.
FYI "morph", for me, invokes superknob. I know you didn't directly implicate it - but I wanted to be complete in case of one interpretation of "morph".
It would help if seamless switching (or "SSS") between userbank/program (performances) was used as a term and reserve "morph" for superknob. But I get you with the additional description.
For 32-bit compatibility I use a plugin which acts as a bridge from 64-bit to 32-bit plugins. It hasn't been perfect - but did the job for supporting some plugins for how I used them. There may be more than one solution out there that does the same thing - just know that there is "an app for that".
If Cubase injects MIDI messages that were not present in the original stream. Because either it has been configured to do so or because it "feels like it" - this seems bad. Cubase has lots of reset configuration options: "Reset on Stop", "Insert Reset Events after Record", "Never Reset Chased Controllers". Maybe more if I dug into the docs. Seems like if these were set a certain way then you'd end up with more events in a recorded stream than you bargained for.
As far as providing easier ways to do things: I agree with the general notion. It would be nice to have an easier way to do batch modifications so you could tell Montage to take all guitar performances and make a user performance with zone control turned on and bank+PC zone transmit matching the resulting user slot. Bulk dump is a specific I'm not sure I'd throw in there. What method Yamaha used to accomplish the end-goal this is fine to me. I'd just like to see some form of PC-based librarian that allows for easier batch processes to modify a number of performances at once and do other organizational/batch type things that are easier on a PC than a more closed/limited system as Montage's OS. Either that or provide some form of SDK for 3rd party enablement so outside parties could more easily provide the functionality without hacking around the edges.
Current Yamaha Synthesizers: Montage Classic 7, Motif XF6, S90XS, MO6, EX5R
My problem isn't with the superknob, as I remember that was working ok. The problem was getting those user bank programs that I set up to morph properly in playback from Cubase. No matter what I did, they still hiccupped and glitched. I just updated from Cubase 7.5, do you think something in Cubase Pro 9 may change that?
It is not at all clear to me, at least, exactly what it is you are attempting and failing at doing. When you use the word morph, perhaps, since you seem sure what you are describing doesn't involve the Super Knob... you are referring to some form of seamless, glitch-free movement from playing one sound to playing another.
To answer your question. No. There is nothing in Cubase Pro 9 that will change your issue. What, hopefully, will is an explanation of what you can and should expect to happen when you change programs in different situations.
On the front panel of the Montage (playing just the Montage alone, without computer) you can seamlessly move between programs in several ways... none of which involve the Super Knob. And to be clear, by "seamless", we mean that the sound you are playing can overlap into the new sound you have recalled. No instrument is abruptly cutoff, making live performance transitions both smooth and sonically "invisible".
You can move between two KBD CTRL Performances with the SSS (Seamless Sound Switching) feature
You can move between sixteen Single Parts using the [PART CONTROL] > [PART SELECT 1-16] buttons
You can move between emulated sounds within a single Part using the Expanded Articulation Control
SEAMLESS SOUND SWITCHING
The SSS feature is designed for when you are playing the Montage as a standalone synth. Using Performances like those found in the Factory Banks, where you are interacting with between one and eight Parts simultaneously. It is possible to move from one such Performance to the next, the items in the initial Performance will continue to sound as long as they are receiving instructions from the various non-Key controls (Pedals, switches, MS, etc) overlapping into the newly recalled Performance... note-on data post the selection will play only the new program... only when you release the Keys or Sustain pedal of the previous program will that sound end, Motion Sequences which are automated Controller data, will continue its final cycle overlapping into the new program. All new note-ons will play the new program.
This works because each Performance and its multiple Parts each with multiple Insertion Effect processors, all of the processors can be maintained across the transition. You can move between one 8 Part KBD CTRL Performance and another 8 Part KBD CTRL Performance- because Montage has enough dual Insertion Effects to support 16 Parts simultaneously with their full complement of Effects and EQs.
This is a function of the Montage as a physical entity, involving its physical controllers. How you intend to pull off this seamless sound switching while interfaced with an external DAW is what at the heart of the question. It is, at first glance a misinterpretation of what SSS was designed to do.
PART CONTROL and PART SELECT
It seems you want to change Parts when you say you want to "change user bank programs" - when you are using Montage with a DAW like Cubase, the standard use case would be to use it as a 16 Part Multi-timbral tone generator, addressing it on 16 different MIDI Channels.
When this is the use case, you can send a Bank Select and Program Change to switch between instruments sounds and the 30 year old rules of MIDI and Program Changes will apply. If you want pull off any kind of seamless, sonically "invisible" changes in this environment, you do so by switching MIDI Transmit Channels. This accomplishes the goal and avoids the All Notes Off command required by MIDI when the Program Change protocol is used.
Likely this is what you want to accomplish... you want to change programs- but you don't want to Program Change!
Program Change (the official "Bn 00 20") message requires and audio glitch BY DESIGN. It is a built-in feature of Bank Select and Program Change as a message.
Changing MIDI Transmit Channels will allow to change the program (or instrument) you are playing without using the Bn 00 20 message at all... you simply elect to play a different instrument. This works for what you probably want to do.
In Cubase you need only Select a different Track to seamlessly switch the instrument you are engaging currently, it will be sonically "invisible" (assuming you are working with Local Control = OFF).
It is not clear, to me, exactly what you are doing... but try this on your Montage (Standalone initially) so you can clearly understand how Montage works alone first. Then you can apply something similar through Cubase
Recall the INIT "MULTI/GM" setup
Press [CATEGORY SEARCH]
Touch "INIT" > select "Multi/GM"
Substitute instruments as you would setting up to create a 16 Part sequence... different instrument in each Part
Notice you can seamlessly switch between them using the [PART CONTROL] button > and the sixteen [PART SELECT] buttons... you can be holding a String sound in Part 1, Switch to a Organ in Part 2, play the Organ while holding the strings... with this setup you can Hold and switch between all 16 Parts... each has its own dual Insertion Effect and its dual EQs already recalled...no limit, except of course, the currently recalled 16, to how many sounds you can invisibly seamlessly switch between. This works because you are not sending a Program Change, you changing programs by switching Transmit Channels.
Let that sink in, then apply this to whatever it is you are attempting to do with Cubase and changing programs.
Remember Cubase (under normal setup) echoes the data back to the tone generator, rechannelizing your incoming messages.
Jason - thank you and I appreciate your input.
Note: on the 32bit/64bit vst issue... do you know if J-Bridge works well with Cubase 9 Pro since this version does not support any 32 bit vst's?
So following your suggestion, we will use SS = seamless switching. The Montage SS is what pipe organs have been able to do for about a hundred years now. Amazing, it took the advancement of voice technology (or some other trick?) for the digital synth world to catch up... but I think everyone would agree that SS is one of the stellar features of the Montage that inspires creativity.
I'm simply trying to record and playback the Montage (using Cubase Pro 9) accurately. Thus far, despite all the tweaks, Montage Connect, hand entering MSB, LSB, Bank, Prog #s, I still am unable to do that and the hang up is the SS doesn't work on playback ...so, I'm trying to see who has done this successfully. I hope Yamaha will have a look to see if they can (in standalone mode) record something and switch programs seamlessly with sustain pedal down and have it play back with those same seamless switches.
Bad Mister - thank you for explaining a way to accomplish SSS while recording in part mode and changing channels.
But, the beauty of the Montage for me, is much simpler. I like the sounds (Performances) just the way they are, and I don't need to record the parts separately and doing so would interfere with my workflow. I just want to play the Montage, change performances while recording into a DAW, and have it play back the way I played it. That's it. Nothing complicated.
Yet, (and correct me if I'm wrong) it looks like from what you are telling me... is that recording Performance SSS in Cubase or any other DAW will not playback the Montage as I played it and that I have to accept the 30 year old midi rules as the reason. My question then is... aside from the scenario you outlined for SSS of parts, does the Montage sequencer record those same Performance SSS and play them back accurately? And if so, is there any conceivable way to import that Montage sequencer midi file into Cubase and have Cubase play back those switching performances accurately/seamlessly?
Thank you and thanks for the videos
I have used jbridge in Cubase 9 (Windows 10) and it has worked. I do not have an extensive set of 32-bit plugins to test, so this is based off of one public domain freeware plugin. Commercial plugins or extensive testing has not been done.
Concerning jbridge (Windows): initially, the plugin did not work but running everything (all components: jbridge + cubase) in admin mode seems to have fixed any issues I was initially having. This can be set by right clicking on the apps, choosing properties, and choosing the "run as admin" option.
Current Yamaha Synthesizers: Montage Classic 7, Motif XF6, S90XS, MO6, EX5R