Midi program change in performance mode

  • Hi,


    For the past few days i have been trying to get my Kemper to switch via an external midi track.
    I've kind of gotten it to work in browser mode but the numbers arn't right. When i send PC1 to the kemper it goes to #2, PC2 goes to 3, PC 4 goes to 5 and so on. Highly annoying but atleast it's workable for now.


    I really (REALLY!!) want to use perform mode but i can not get it to switch via midi. All setting are the same, i am on the right channel and a little ''#'' shows up on the right of the display when the track gives a midi command so i know there's something reaching the kemper, but it never changes anything. After the # sometimes shows a small symbol of what looks like a quarter note that has been crossed out.


    I've had this problem with multiple computers, interfaces, tracks and DAW's. Am i missing something?


    Please help!

  • Go to Best Answer
  • Kemper starts at midi program 00, so you need to set your midi software to start at 00 as well or you will always be one ahead.
    So your performance banks should be
    Bank 1 - 00, bank 2 - 01, bank 3 - 02, bank 4 - 03, etc

  • Page 171 is about expression pedals and remote settings, i dont see how it has anything to do with my question?


    I have read the manual page about my problem (177) about a dozen times and i'm trying exactly what is written there, with no results.


    ''The second method is to send MIDI program changes from your remote controller. There are 128 program changesavailable in MIDI and these are assigned to each Slot as they occur within the Performances, in linear fashion:Rig in Performance 1, Slot 1 loaded by program change 0Rig in Performance 1, Slot 2 loaded by program change 1…Rig in Performance 2, Slot 5 loaded by program change 9MIDI 179…Rig in Performance 26, Slot 3 loaded by program change 127 ''


    If i send a PC to my kemper, be it 1, 2, 50 or 100, it does not respond, let alone switch, in performance mode.

    • Best Answer

    Hey Gert,
    I use Midi messages all the time.
    Here is the skinny..
    First Midi Messages are composed using the Hexidecimal number system.
    It starts at 00h decimal starts at 1.
    For the desired preset number to be transmitted it becomes.
    (Decimal Preset number-1)
    So if you want Preset 1 you program 0
    For preset 64 you program 63 and so on.
    What really gets sent is
    00 for preset 1
    3F for preset 64


    Also make sure your message is constructed correctly.


    A Byte is an 8 bit value containing two 4bit nibbles.


    A Midi Program Change message contains three Bytes.
    Header Byte , Value Byte and End of Exclusive Byte


    Header Byte = Cx where C is the upper nibble command for Program Change and x is the lower nibble desired midi channel.


    Value Byte = Desired preset number


    End of Exclusive (EOX) = F7 notates end of a particular message string.
    Quick Midi Channel Decimal to hex table.
    Here is Decimal 1 to 17.


    Note for Midi Channel selection keep them between 1-16 Dec as 17 Dec notates Omni which means any channel. You don't want that.


    1=00
    2=01
    3=02
    4=03
    5= 04
    6=05
    7=06
    8=07
    9=08
    10=09
    11=0A
    12=0B
    13=0C
    14=0D
    15=0E
    16=0F
    17=10 (Omni mode) responds to any and all channel commands. You don't want this.


    Back to the program change for example say you set the Kemper on Midi Channel 4 and you want recall Preset 8
    The program change message


    Preset command header Byte Cx where C is the program change command and x= Dec Midi Channel number-1 becomes C3


    Preset change Value Byte = Desired Dec preset number-1 which becomes in this case
    (8-1)=07


    Last the EOX Byte F7


    The complete message to send would be. C3 07 F7 .


    Any Midi Program Change needs to be constructed like the one above.
    Even MCC messages should be created in a 3 Byte format. Though MCC messages in theory can omit the EOX I would strongly suggest to included it.
    MPC messages must include an EOX Byte.


    The Kemper Midi Channel in this case would be set to 4.


    Search for a Dec to Hex conversion table on the web as it will come in handy for you in your programming endevours.


    Hope this helps.

  • I really admire your detail SgtPepper, but I think that list of numbers is enough to put most people off using midi. I found it quite easy to send patch changes and control changes from a Pro Tools setup.

    Karl


    Kemper Rack OS 9.0.5 - Mac OS X 12.6.7

  • For the past few days i have been trying to get my Kemper to switch via an external midi track.
    I've kind of gotten it to work in browser mode but the numbers arn't right. When i send PC1 to the kemper it goes to #2, PC2 goes to 3, PC 4 goes to 5 and so on. Highly annoying but atleast it's workable for now.

    that's simple: in MIDI, there's not really a convention on if you start counting from 0 upwards or from 1 upwards. as a result, some instruments and effects interpret what you send differently. but that's not a problem because that's nothing that will change. if you see that things don't match up, you just add or subtract 1 to make it work.


    btw: i'm simplifying this thing a little.

    Get in touch with Profiler online support team here

  • Thanks for your detailed responses!!
    I don't understand all of it so i have some learning to do..


    As for now, i just want to use the kemper in performance mode instead of browser mode.


    How is it that the midi PC i send does work when in browser, but not when in performance? I feel like something is not setup right within performance mode since it does not respond at all to any midi pc i give it.

  • Even MCC messages should be created in a 3 Byte format. Though MCC messages in theory can omit the EOX I would strongly suggest to included it.
    MPC messages must include an EOX Byte.

    This is wrong. MIDI program changes comprise of 2 bytes. There is no EOX at the end. In fact, this could mess up the sending of sysex which can always be interrupted by fixed-length messages.

  • Page 171 is about expression pedals and remote settings, i dont see how it has anything to do with my question?

    Guess we are not reading the same chapter (MIDI, switching in perf mode). Blame it on PDF(tm).


    I was referring to the method of selecting the performance number with a CC48 and selecting the slot with a CC50-54, which your device may or may not allow to do .
    Or you can do the math to convert perf nr&slot into the corresponding PC, as explained above.

  • That's the whole point of my post. I'm trying to use the PC corresponding to the right slot in performance but it does not respond to the PC in performance mode. I'm starting to think something is broken.

  • The whole point of my post was giving you an alternative approach to reach your goal.


    FWIW, using both MIDI-floorboard and DAW via Focusrite I just verified with the latest KPA firmware release version that PC in perf mode works as advertised, no matter if omni or fixed channel.
    For a moment you had me doubting, because I use to dwell in browse mode.


    Your problem must be somewhere else, and it seems it's not the cables...


    The # in the display denotes a received PC. No idea why it wouldn't switch, the knob icon stands for received CC.
    Is this a clue that your DAW sends more than the expected PC?
    Check what really goes on the wire, with the DAW inbuilt MIDI monitor, or the likes of MidiOx.


    PC# must be converted to actual perf#&slot#, there is no 1:1 relation.
    The manual hints as follows:
    'You could also use the following formula: (#Performance x 5) - 5 + (#Slot - 1)'


    Hope you get to the bottom of this.

  • As to Timo's point . If a Midi Service Routine is written properly using an F7 termination Byte should Not throw any cog into your buffer service routines. If you happen read an F7 you set an Eox_Service_Flag and leave the interupt. Then check if there are any message service routine flags set in the main loop and act accordingly. If there are no other specifying service flags set you simply clear the EOX recv flag in your service code and be on your way. Your midi service routines should be written in such a manner to be absolutely bullet proof with All possible scenarios considered. So in affect the EOX should insure some sort of action is taken.
    So let me ask you a question. Considering an Mcc message you Can absolutely opt to either omit the Eox or use it is your service routine going to get confused then?
    As a secondary follow up say your receiving a Sysx message you have confirmed the header and product Id but some how a few transmission bytes get corrupted or omitted yet the Eox gets received? Do you loose your midi mind and attempt to service the message or have a mechanism to verify either the proper number of bytes ecpected? Naturally a preset dump would contain some sort of checksum. But I'm talking about say for instance a special command used for some internal function that you want to be private.
    If the message is not correct you just ignore it and clear the service flag.


    In the case of the Pc message if you serviced it before the Eox is detected big deal! what is the difference? You would clear the Eox service flag and be on your way. Its really not that complicated for you to anticipate that is it? Certainly nothing to blow the stack? Right?

  • Gert Jan,


    When reading all above I'm getting a little dizzy.


    Maybe this will help you.


    In performance mode you have to send two messages.
    First up a control change message #32 0 and second a program change (which can be seen in the screen on the left).


    In the manual it states: Rig in Performance 1, Slot 1 loaded by bank select LSB #32: 0 program change 0
    Rig in Performance 1, Slot 2 loaded by bank select LSB #32: 0 program change 1


    When you reach performance 26 Slot 4, you change the control change number to 32 #1 and program change 0 (again)


    In the manual it states: Rig in Performance 26, Slot 3 loaded by bank select LSB #32: 0 program change 127
    Rig in Performance 26, Slot 4 loaded by bank select LSB #32: 1 program change 0


    Cheers!

  • Sorry for the coding protocol banter fellas.
    I'm sure TIMO got the gist.


    As for me I keep the KPA in browse mode and send PC a MCC messages as needed.


    But I have to say what was just quoted from the manual does appear to be a little convoluted at best.
    Reading between the lines I would put it this way.
    #32 0= Bank 1
    PC 0-127= 128/Performance.Slots=Rig#
    On that assumption since there are 5 slots hence the PC=0-124 per Bank.
    Just throw away PC 125,126 and 127,
    After you reach the 124 PC limit you send MCC #32 and new Bank Value
    Send PC =0 and do it all over again.


    But as a fellow guitarist and programmer possibly a more graceful aproach would be.
    MCC #32 VALUE= 0-120 Performance Bank Select.
    PC = 0-4 Slot Select.
    Simple to understand easy to program.
    Would make needing a calculator to get to one particular rig unnecessary.


    Alternatively you could use another MCC # and VALUE= 0-4 to pick the desired slot as well.
    Midi Apples vs Midi Oranges.
    Cheers

  • Eh.. I still don't think we have a handle on this. Hopefully someone at Kemper jumps in and clears this up.
    If you look at the Screen on the Kemper it tells you Exactly what the MIDI PRG # and the MIDI Bank # is that will recall that performance and slot. to do this you have to recall a performance in performance mode, then push the Browser button and then push the performance button and this info will appear in the lower left of the screen.

    The MIDI PCs appear to be in standard numerical format, meaning you don't subtract 1. EG: Performance 1, slot 1 says MIDI PRG #1, MIDI Bank #1, If you push the up arrow and go to performance #2 it says MIDI PGM #6, MIDI Bank #1. Therefore Performance 1, slot 1 is 1, slot 2 is 2, slot 3 is 3, slot 4 is 4, and slot 5 is 5 because MIDI PGM # 6 Is slot 1 of performance #2. AND MIDI PGM #11 is slot 1 of Performance 3. Follow me?
    Now If you send this:

    0: B0 00 00 [CC0 Bank Select MSB] chan 1 val 0

    1: B0 20 00 [CC32 Bank Select LSB] chan 1 val 0

    2: C0 0C 00 [Program Change] chan 1 val 11
    It Recalls Performance 3 slot 1 - as expected
    And If you Send...

    0: B0 00 00 [CC0 Bank Select MSB] chan 1 val 0

    1: B0 20 00 [CC32 Bank Select LSB] chan 1 val 0

    2: C0 0C 00 [Program Change] chan 1 val 12
    It Recalls Performance 3 slot 2 - as expected

    OK. We have control and are getting expected results.

    NOT SO FAST. Say that PERF 3 Slot 1 is your verse tone and slot 2 is your Lead tone. You're gonna start with your verse (slot 1 ) and switch to your Lead (Slot 2) and then Switch back to your Verse (Slot 1). To do that you would send:

    0: B0 00 00 [CC0 Bank Select MSB] chan 1 val 0

    1: B0 20 00 [CC32 Bank Select LSB] chan 1 val 0

    2: C0 0C 00 [Program Change] chan 1 val 11

    3: B0 00 00 [CC0 Bank Select MSB] chan 1 val 0

    4: B0 20 00 [CC32 Bank Select LSB] chan 1 val 0

    5: C0 0B 00 [Program Change] chan 1 val 12

    6: B0 00 00 [CC0 Bank Select MSB] chan 1 val 0

    7: B0 20 00 [CC32 Bank Select LSB] chan 1 val 0

    8: C0 0C 00 [Program Change] chan 1 val 11

    BUT when you send this, what happens is :
    You get Slot 2, then Slot 1, then Slot 2 - Its totally backwards of what it should do.


    But If you send this:

    0: B0 00 00 [CC0 Bank Select MSB] chan 1 val 0

    1: B0 20 00 [CC32 Bank Select LSB] chan 1 val 0

    2: C0 0C 00 [Program Change] chan 1 val 12

    3: B0 00 00 [CC0 Bank Select MSB] chan 1 val 0

    4: B0 20 00 [CC32 Bank Select LSB] chan 1 val 0

    5: C0 0B 00 [Program Change] chan 1 val 11

    6: B0 00 00 [CC0 Bank Select MSB] chan 1 val 0

    7: B0 20 00 [CC32 Bank Select LSB] chan 1 val 0

    8: C0 0C 00 [Program Change] chan 1 val 12


    You get Slot 1, Slot 2, Slot 1, again, the exact opposite of what you sent, but getting the results you need.


    WTF?


    And before anyone says are you sure you're sending them in the right order? The strings above were copied directly out of the MIDI Activity Log in Reaper. So Yes I'm sure.


    I haven't even started playing with 3,4,5 slot patches yet and I'm going to need to. So.... HELP?
    I'm guessing this is something stupid simple I'm missing but.....

    "To err is human, but to really foul things up you need a computer.":P

  • G String

    Selected a post as the best answer.
    • New
    • Official Post

    A few comments:


    1. At Head and Rack models the MIDI bank and program change numbers appear on the display excactly as shown on the picture above, but only while no Remote is connected.


    2. All these bank select and program change numbers are displayed in the logical range 1-128. dswguitars is mixing these with the numeric range 0-127. The values of the bank selects in his example are numerical, while the program changes are logical range. If Reaper expects all numerical, the program change # could be too high by +1.


    3. The PROFILER doesn't load Slots which are not enabled. Related MIDI comands are ignored. The purpose of disabled Slots is, that these cannot be loaded accidentally via foot control.


    4. Bank Select MSB and LSB are redundent. There is no need to send Bank Select MSB since it is always Bank 1 (value 0). And as long as you don't exceed Performance 26 Slot 3, you always stay within Bank Select LSB Bank 1 (value 0).

  • OK So Maybe its not stupid Simple.


    Sorry I should have have indicated I'm using a Kemper Stage,


    # 1 Correct as this is exactly the case with my rack.


    #2 I understand that the PC# Is logical range and the MSB and LSB are numerical. This is Reapers Default. I left it alone because I agree the MSB and LSB are redundant (and therefore figured it didn't really matter as the information would be ignored), But that's just how reaper spits out the stream. Yes I do have the ability to change those values, however, The Kemper is NOT responding as if the the PC# is too high by +1. If I Send ...

    0: B0 00 00 [CC0 Bank Select MSB] chan 1 val 0

    1: B0 20 00 [CC32 Bank Select LSB] chan 1 val 0

    2: C0 0C 00 [Program Change] chan 1 val 11

    It Recalls Performance 3 slot 1 - as expected. It also appears to me it is also just ignoring the MSB or LSB as they are redundant.


    3. The PROFILER doesn't load Slots which are not enabled. Related MIDI commands are ignored. The purpose of disabled Slots is, that these cannot be loaded accidentally via foot control. 100% as it should. Nothing in a slot, nothing to recall, and you can't. But I think it is important to note that the PC#'s Don't get re ordered because a slot is empty. Those empty slots are accounted for. Thus Performance 1, slot 1 PC #1, Performance 2, Slot 1, =PC #6, Performance 3, slot 1 =PC #11 etc. etc.


    4. Bank Select MSB and LSB are redundant. There is no need to send Bank Select MSB since it is always Bank 1 (value 0). And as long as you don't exceed Performance 26 Slot 3, you always stay within Bank Select LSB Bank 1 (value 0). Agreed. But I will exceed Performance 26 and will change the bank value as necessary.

    But none of this addresses the real issue.
    When I send this ...


    1: C0 0C 00 [Program Change] chan 1 val 11

    2: C0 0B 00 [Program Change] chan 1 val 12

    3: C0 0C 00 [Program Change] chan 1 val 11

    Why does the Stage load Performance 3 slot 2, Perf 3 Slot 1, Perf 3 slot 2 ?

    And when I send ONLY
    1: C0 0C 00 [Program Change] chan 1 val 11
    It loads Perf 3 Slot 1
    as expected


    Why is it not responding correctly when there are multiple commands in the midi file?


    "To err is human, but to really foul things up you need a computer.":P