Bank change, program change

Hi there - I’m new to Midihub, but I’ve already managed to build some pipelines doing funny stuff and read the tutorials.
Now, one of my ideas is to switch banks and presets on Yamaha CP-88 and via Midihub generate bank and preset changes for Roland V-Synth and Roland SE-02 (and then the same for more synths, but let’s keep things simple.)

e.g. I want to chose Patch 3 in Bank 38 on the CP88 and make the V-Synth switch to patch 35 in Bank 1 and make the Roland SE-02 switch to patch 48 on the User Bank (Bank 4)

How do I do that? I understood that it involves Transform Blocks and that Program Change should be transformed into Control Change and then transformed back to Program Change. But I don’t get how exactly to do the whole process. Is it explained in detail somewhere? Is there a Midihub Preset to start from?

CP88 has 40 Banks of 8 Patches - values are:
MSB CC#0 63
LSB CC#32 0 - 39
PC 0 - 7

Roland V-Synth has 4 banks of 128 patches - values are:
MSB CC#0 87
LSB CC#32 0 - 3
PC 0 - 127

Roland SE-02

MSB CC#0 0
LSB CC#32 0 - 3
PC 0 - 127

thank you!

Hey @groove_role, roland

Not necessarily; the best approach it will depend if the pattern when you “switch banks and presets on Yamaha CP-88” can easily be ‘translated’† to the pattern of changes on the other devices.

†··· ('mapped' is the correct word here but don't want to get muddled with the Midihub meaning!)

Is it explained in detail somewhere?

No.
I’d like there to be a tutorial on “How to use Transform”, so let’s use your excellent example to write a section in it! :grinning_face:

First:

  • What messages will go CP-88 → Midihub when you “switch”?
    Please post a MIDI Monitor screenshot of that input port.

  • Also give details of whether the Channel remains the same.

  • Maybe leave a few secs between each change so you can link those messages in the screenshot with the next part

  • do the changes in order (if there is one) to make it easier to see patterns in the outcomes

Second:

  • Detail precisely (including what channel) what message you want each of those incoming messages to send to trigger to the two outgoing synths’ changes
  • unless the manuals is super clear you might need to do some testing
testing

Let’s say every change on SE-02 is of form Ch.7 CC#0 0, Ch.7 CC#32 2, Ch.7 PC 6
…use maybe a keyboard test doing something like…
Example0-Note>CC0+CC32+PC_using_NoteNumber .mhp

…to get a better feel of what the device demands.

That should give enough to figure the best way to get you moving.





Welcome to MH forum, btw

:slight_smile: o… the CP88 is sending a whole bunch of stuff when I push the button “Page +” (bank change from Bank 37 to Bank 38 Program 2, screenshot 1 and 2) and then push the button “2” (Program Change to Program 3, screenshot 3).




I see the Program Changes, but can’t spot the bank changes in all of this, which is what I need.
I have connected CP88 on IN MIDI A, V-Synth on Out MIDI A and Roland SE-02 on Out MIDI B, V-Synth receives CH1, SE-02 receives CH2, but it doesn’t really matter on which channel to me.
Your test Preset with Note on → Program Change does work to step through Programs. If I can do the same thing using “+” and “number”, i’m already happy… :slight_smile:

correction: “… the CP88 is sending a whole bunch of stuff when I push the button “Page +” (bank change from Bank 37 to Bank 38 Program 2, screenshot 1 and 2) and then push the button “2” (Program Change to Program 3, screenshot 3).”

it’s not button “2”, but button “3”.

No Bank Changes Incoming.

Not important if your Outgoing PCs are unique to all the presets your using on your source.

And a lot easier to deal with one Incoming message(as opposed to “Do this when This AND This AND This happen”!).





Next step, I think is to adapt the 3 Transform preset:

  1. Filter Out the CCs
    then, for every Transform:

  2. Change the From to Program Change

  3. Change the parameters including and below the one highlighted as shown


    (This fixes what PC the Transform is going to Work With to Only Channel1 and PC#2)

In short, this gives us the simplest set up for your scenario:

1 Fixed PC IN → 1 Fixed combination of CC#0,CC#32,PC OUT.
for just one synth.


.

  • Try this with two parallel pipelines, one for each receiving synth.

  • Change the V-Synth to Ch3 so that…

  • …you can create more than one “triplet” of Transforms in one pipeline without fear of clashes

  • Consider making a spreadsheet table (or tabbed test file) so that you can layout
    Incoming → Outgoing1, Outgoing2

    Then we can see if there are quicker ways than this old-school “preset by preset” approach!

CP88 PC V-SynCC#0 V-SynCC#32 V-SynPC SE-02CC#0 SE-02CC#32 SE-02PC
2 87 3 5 0 1 76

I’m sorry, this was too fast, or rather, I’m too dumb :-(. Maybe I get it if I see all the properties for all the blocks…
And, I somehow need to be able to send Bank Changes?, since I have more than 8 Presets in my CP88 I want to use…

It might be best if you upload the list/table of what PCs IN → what CC#0,CC#32,PC OUT

This makes it clear what the complete task is.

since I have more than 8 Presets

I don’t know where the restriction of 8 comes from.


EDIT:

somehow need to be able to send Bank Changes

according to this the CP-88 does!
(also says it only sends PC0 → 7 (hence 8, I guess?) )

OK, this changes the scenario quite a bit.
When you’ve found out how to enable Bank Changes then we can start to look at what your IN → OUT(s) list will look like

right, I found out how the CP88 sends CC#0 and CC#32 bank information! I upload a chart with the desired values for V-Synth and SE-02.

just noticed this.
Well done for figuring out how to get CP88 to send Bank info.

I think this will need a strategy writing for you (see below)

A few questions first:

  • Have you checked it’s actually sending these when you change set (CP88 seems to have different modes of working)?

  • So SE has no program for some songs? Does this mean that it’s not getting notes at all or is the notes source for SE separate from CP88 so we don’t need to worry about routing?

  • And SE needs no CC#32, just CC#0 then PC? Before, you mentioned values 0,…,3.

Why the solution is not trivial?
This is purely because we need to combine the values of two messages in a way to give a single unique “answer” that we can then use to create messages to send to MIDI A and MIDI B.

So, possible, but a little subtle.





I’ll test something out while I await your confirmations…

  • yes, CP88 is sending CC#0 and CC#32, when I switch programs inside a live set (0-7, meaning 1 - 8) or outside (banks 0 - 39, meaning 1 - 40)
  • in some songs, SE isn’t used at all (so it can rest on the bank/program from the song before, and then switch for the next song to the appropriate bank/program)
  • yes, I monitored the SE, it just sends (and receives, I guess) CC#0, but not CC#32

Excellent, I think I have a solution for you
(got the problem-solving bit done, just want add enough “settings mappings” to get a few of your “answers”)

btw, I thought you had more than 8 presets.

PS. if you want to upload a spreadsheet proper, the site accepts archive (.zip) files

great!

I do have more than 8 presets, but I was lazy & I thought, if I will look at your solution, I can hopefully build the solution for the other presets (?)

Aah I did wonder.

Thing is, I do need to know the full possible range of the Incoming CC#0 & CC#32 to be sure my strategy is going to work:

  • If Incoming CC#0 varies from 63 or
  • Incoming CC#32 differs by 16 or more…

    …then I need a different approach

Let me know.

My current method is going to use CC Table so you might want to study that.
(I’m just running into some unexpected behaviour with CC Table which I may need to raise with Giedrius. Hmmmm :thinking: )

ok. From what I understand & see, Incoming CC#0 will always be 63.
incoming CC#32 from my Presets will always be in the 4 or 5 banks from 37 … 41.

1 Like

Solution 1

Hey, @groove_role,

As hinted, I was planning to use the new CC Table but have run into some difficulties with it.

Rather than wait, here’s a method based on the improvements made to both mappings and Transform about two years ago:
Example4_TransformBanks_using_Mapped Note.mhp

I will write more detailed notes later but in brief:

It is not finished…

…but I have written enough so that, with careful scrutiny, you can add the extra Transforms in pipeline 2 & 3, to complete your table❖ and test.

Basic Notes

  1. Pipeline 1 uses CC0 & PC to create a unique “Id Note” to pass on to pipelines 2 & 3.
    Its only clever-ish thing is to Rescale the CC0 to create values to set the Channel Number of the “Id Note” thus making it unique for each incoming (CC0, PC) pair.
    Don’t edit this pipeline!

  2. Pipeline 2 takes this note and – stage-by-stage – creates the necessary CC0 & PC for V-Synth.
    This has been done only for the first 3 (CC0, PC) pairs/ “Id Notes”

  3. Pipeline 3 has only the pipes necessary to block the Id notes that will do nothing.
    The other Transforms can be figured out by alt-dragging from Line 2, then adapting the properties.

  4. Both 2 & 3 end in virtual G as it’s probably best to methodically check you’re getting the right numbers out before changing the Destination and hooking up the synths!

  5. I’d strongly recommend Monitoring each pipe in turn as you send in one (CC0, PC) pair at a time. Skipping between similar adjacent Transform pipes in Line 2 will make it clear which task (ie. cell(s) in the table) each is achieving.

Here's a summary diagram

including the table I based my work on.

the Monitor is focused on the selected Filter in line 2

❖ The Table

I used was made by just pasting from a spreadsheet into a page like this …

Song No CP#0 CP#32 CP-PC VS#0 VS#32 VS-PC SE#0 SE-PC id_Note
Song1 63 37 0 87 3 96 3 59 ch6.nt0
Song2 63 37 1 87 3 96 ch6.nt1
Song3 63 37 2 87 2 95 3 60 ch6.nt2
Song4 63 37 3 87 3 96 ch6.nt3
Song5 63 38 0 87 2 25 2 26 ch7.nt0
Song7 63 38 2 87 0 0 ch7.nt2
Song8 63 38 3 87 3 4 ch7.nt3

.. then copying over to the Description panel
(neat trick)

But , remember, I typed that in from your ‘Bildschirmfoto’ image so the chances it’s all correct are near zero!

holy moly… thanks a lot already!
will try this out tomorrow.

1 Like

Hey @groove_role

I just realised that…

I was planning to use the new CC Table but have run into some difficulties with it.

…was a Resonotter Not Paying Attention Problem

“always check the Mode, always check the Mode, always check the Mode…”

so here’s

Solution 2: the CC Table method

now instead of (pretty much) a Transform for every cell in your table we have this:

…where we just need a new mapping for each value.

Notes

  • The first line is the same as before but with a “safety” filter

  • I use CC111 to carry the required PC#. These are converted later.

  • This should be a single CC → PC Transform but I need to employ a workaround…

    …to make sure the PC comes after the Bank Change
    (this may be solved later)

  • see here about “copying” mappings to save a bit of time


Example5_CCTable_using_Mapped Note (inc ordering fix).mhp

i loaded your mhp file MIDI Hub… I think I understand what you did here, but something is not working… when I click on one of the CC Tables in the 2nd pipe, I lose connection and get an error message: “Lost connection to Midihub Sync error 29.”
also, the light in the Midihub blinks with every signal from the CP88, but monitoring sometimes drops out…

Sorry to hear that @groove_role.
Beyond my understanding, I’m afraid.
I’m sure @Blokas will advise shortly.

I wrote that in Editor 1.16.1 on a MH running firmware 1.16.3 so I assume you’re on the same (check the bottom right of the window when you’re connected)

Apart from physical stuff like other USB cables, not using a USB hub, etc,
you could try the following just to see what happens.

  • Start a new pipeline with FROM H
  • drag in two new CC Tables and populate them
like this...


…or at least a few mapping lines before

  • …seeing whether clicking on CC Table crashes MH even with just a few maps

At least this might gather some more info to help pinpoint the problem.

Here’s that single line to test whether it crashes when alone.

Sorry I can’t be more help

Hey, could you verify if you are running Midihub Editor version 1.16.1 (Help → About or Midihub Editor → About) and Midihub Firmware (shown in bottom right corner when connected to Midihub).

Does the CC Table issue happen every time you try that?