Midi Messages send "BANK" change messages

Home Forums General General MIDI discussion Midi Messages send "BANK" change messages

This topic contains 13 replies, has 3 voices, and was last updated by  JT64 1 month ago.

Viewing 14 posts - 1 through 14 (of 14 total)
  • Author
    Posts
  • #114660

    JT64
    Participant
    • Topics: 8
    • Replies: 20
    • Total: 28

    Somehow my original message dissapeared, i would like to know howto “build a bankmessage” for Korg N364.

    I know howto send note and midichannel “the basics”. But i can’t quite figure out howto change bank given the little info i found.

    Could someone help me construct it? In decimal would be nice, but hex or bin ok.
    Here is the info i found i can’t see it say anything about bankchange, i would guess these type of ino not available in a usermanual, so where can one find it service manuals or? How did he find out these things?

    [ KORG N264/N364 SysEx – A Quick Reference Guide ]

    Compiler: Kenneth Jonsson (http://user.tninet.se/~ufn204a)
    Updated: April 29, 1998.

    All pages & tables refer to the N264/N364 Reference Guide.

    x = global MIDI channel: 0 through F (equals 1 through 16)

    ———————————————————————–
    GENERAL N264/N364 SYSEX CODE:
    ———————————————————————–
    SysEx start F0
    KORG ID number 42
    MIDI channel 3x
    N-series ID 35
    Function code
    Data
    SysEx end F7
    ———————————————————————–
    DUMP REQUESTS:
    ———————————————————————–
    Current program F0 42 3x 35 10 F7 *
    Current combination F0 42 3x 35 19 F7 *

    Global data F0 42 3x 35 0E 00 F7
    Pattern set F0 42 3x 35 09 00 F7
    Drumkits F0 42 3x 35 0D 00 F7
    All programs F0 42 3x 35 1C 00 F7
    All combinations F0 42 3x 35 1D 00 F7
    All sequencer songs F0 42 3x 35 18 00 F7
    All data F0 42 3x 35 0F 00 F7

    Current mode F0 42 3x 35 12 F7

    * = N264/N364 must be in prog or combi mode respectively
    ———————————————————————–
    MODE SELECT:
    ———————————————————————–
    Combination mode F0 42 3x 35 4E 00 00 F7
    Program mode F0 42 3x 35 4E 02 00 F7
    Sequencer mode F0 42 3x 35 4E 04 00 F7

    Global mode F0 42 3x 35 4E 06 00 F7
    Disk mode F0 42 3x 35 4E 07 00 F7

    Combi edit mode F0 42 3x 35 4E 01 00 F7
    Prog edit mode F0 42 3x 35 4E 03 00 F7
    Seq edit mode F0 42 3x 35 4E 05 00 F7
    ———————————————————————–
    ERROR / ACKNOWLEDGEMENT MESSAGES:
    ———————————————————————–
    In-data format error F0 42 3x 35 26 F7
    Data load completed F0 42 3x 35 23 F7
    Data load error F0 42 3x 35 24 F7
    Write completed F0 42 3x 35 21 F7
    Write error F0 42 3x 35 22 F7
    ———————————————————————–
    PROG / COMBI / DRUM PARAMETER EDIT (CUMBERSOME!):
    ———————————————————————–
    Prog write request F0 42 3x 35 11 0b nn F7
    Combi write request F0 42 3x 35 1A 0b nn F7
    Prog/combi param change F0 42 3x 35 41 yy zz vv ww F7 *
    Drum kit param change F0 42 3x 35 53 0k ss 0p vv ww F7

    b = bank number: A=0, B=1
    nn = prog/combi number: 00 through 99 (decimal)
    yy = parameter number LSB (see tables 8 through 12 on page 225)
    zz = parameter number MSB ( – ” – )
    vv = value LSB (see note 13 on page 220)
    ww = value MSB ( – ” – )
    * = N264/N364 must be in prog edit mode to change current prog
    parameters, and in combi edit mode to change current combi
    parameters.
    k = drum kit number: A1=0, A2=1, B1=2, B2=3
    ss = index number: 00 through 59 (decimal)
    p = parameter number (see table 13 on page 225)
    ———————————————————————–
    MISCELLANEOUS (NON-SYSEX):
    ———————————————————————–
    Select seq song F3 0s (s = 0 through 9)
    Start seq play FA
    Continue seq play FB
    Stop seq play FC
    Seq position F2 yy zz

    Master volume F0 7F gg 04 01 yy zz F7
    Master balance F0 7F gg 04 02 yy zz F7
    Master balance center F0 7F gg 04 02 00 40 F7

    General MIDI mode on F0 7E gg 09 01 7F
    Instrument ID request F0 7E gg 06 01 7F (see table 1-4 on page 214)

    Timing clock F8
    Active sensing FE

    gg = global MIDI channel: 00 through 0F, or 7F for any channel
    yy = LSB: 00 through 7F
    zz = MSB: 00 through 7F

    #114661

    JT64
    Participant
    • Topics: 8
    • Replies: 20
    • Total: 28

    Are all messages starting with F0 sysexmessages?

    Here is by the way how javascript handling it, i think it take it in hex also.
    Bankchange message for Korg N364 anyone?

    message = [240, 126, 127, 6, 1, 247]; // device ID request
    outputPort = midi.outputs.get(portID);
    outputPort.send(message);

    #114662

    JT64
    Participant
    • Topics: 8
    • Replies: 20
    • Total: 28

    Ok think i solved it, found something. I guess it means that bankchange is not a sysex message.
    Is that true for all synths?
    Anyhow Nice!

    file:///C:/Users/jonas/Downloads/_home_httpd_data_media-data_8_BankChangeKorg-.pdf

    #114664
    goodweather
    goodweather
    Participant
    • Topics: 40
    • Replies: 390
    • Total: 430
    • ★★

    Exactly!
    it is about the same on all synths.

    Program change is usually a channel message like 0xCm 0x00/7F where m is 0 to F and is your midi channel 0-15 and where the second byte is O to 127 (00 to 7F)

    Bank change is a controller message like 0xBm 0x20 0x00 to 0x07 where m is 0 to F and is your midi channel 0-15 and where the second byte is the copntroller number (0x20 or 32 in this case) and the third byte is in my example O to 7 allowing to select a bank 1 to 8.

    It is in this third byte of the bank change message that you will have differences between the synths (but also in the 2nd byte of the program change message)

    #114668
    Possemo
    Possemo
    Participant
    • Topics: 13
    • Replies: 568
    • Total: 581
    • ★★★

    afaik bank select is standardized by midi specs. It is a bit more complicated than simple control change messages as it consists of two 7-bit msb/lsb parts. There may exist some synths that are using only one of them. It is quite well explained here: https://www.mutools.com/info/docs/mulab/using-bank-select-and-prog-changes.html

    Ctrlr uses the Lua script language, not Java script. Syntax is somewhat similar. No need to do most of the hard work, you will just access components of Ctrlr and/or use the Juce libraries (not all classes are implemented in Ctrlr – e.g. audio classes wouldn’t make much sense): https://docs.juce.com/master/index.html
    Best way to learn Ctrlr is to check how others have done it e.g. start with the demo panels from Roman: http://ctrlr.org/demo-panels/

    #114673
    goodweather
    goodweather
    Participant
    • Topics: 40
    • Replies: 390
    • Total: 430
    • ★★

    Well, when I wrote my answer I simplified the bank message which contains indeed 2 controller messages (and at the same time I told myself that I was sure someone would react 😉 )…

    So, for bank message you need to send 0xBm 0x00 0x00 then 0xBm 0x20 0xsomething

    The something can be different from one synth to another one depending on the organisation of the programs.

    Example on Sub37: 16 real banks of 16 programs but the “something” is only 0 or 1 because each virtual bank contains 128 programs (0-127) each
    Example on Pro2: 8 real banks of 99 programs. The something is in that case 0-7 while for programs only 0-98 is recognized even if each virtual bank can handle 128 programs

    #114674

    JT64
    Participant
    • Topics: 8
    • Replies: 20
    • Total: 28

    Just as someone said it seem just to be two control messages.

    Korg X Series/N364/264/Trinity Series/ Z1/Z1EX

    BANK A
    Message Value
    Controller 0 0
    Controller 32 0
    Program Change 0-99 (0-127)
    BANK B
    Message Value
    Controller 0 0
    Controller 32 1
    Program Change 0-99 (0-127)
    BANK C
    Message Value
    Controller 0 0
    Controller 32 2
    Program Change 0-99 (0-127)
    BANK D
    Message Value
    Controller 0 0
    Controller 32 3
    Program Change 0-99 (0-127)
    BANK S/M (Trinity)
    Message Value
    Controller 0 0
    Controller 32 4
    Program Change 0-99 (0-127)
    GM BANK (X and N Series)
    Message Value
    Controller 0 56
    Controller 32 0
    Program Change 1-128
    GM DRUM BANK (X and N Series)
    Message Value
    Controller 0 62
    Controller 32 0
    Program Change *

    #115212

    JT64
    Participant
    • Topics: 8
    • Replies: 20
    • Total: 28

    Regarding Midi Control of my N364 “using Javascript”

    Well i came so far i can load the banks and i have no problem changing programs within banks

    ***EXCEPT FOR the drum bank***? Is it really a bank? Because the drum sets listed as program 128 to 236 in GM bank it is uttely confusing. Does this mean Korg N364 do not have dedicated midichannel 10 for drums?

    I can reach Drum bank “patch 128 in GM bank” it is easy, resting within the program banks not combi banks.

    You first tell what mode to put synt into equal “program mode” and send the 3 part message two control messages followed by a program message, to get there.

    In all banks except GM drum i can just send a program message to set “instrument” in this case drumkit. Something like outportarr[outportindex].send(192,10,4)

    But when drumBank selected it do not work “because it seem like the kits in bank are just patches in the GM bank 128-136”. I just do not get howto change kit. And it get very confusing looking into the cakewalk instrumentfile. A hint anyone?

    What does it mean
    Patch[7169] = N364 Prog GM
    Patch[7937] = N364 GM Drums
    Patch[ * ] = 0. .127
    Key[7937, 0] = N364 GM Kit
    Key[7937, 16] = N364 Power Kit
    Key[7937, 25] = N364 Dance Kit
    Key[7937, 26] = N364 Analog Kit
    Key[7937, 33] = N364 Jazz Kit
    Key[7937, 41] = N364 Brush Kit
    Key[7937, 48] = N364 Orch Kit
    Key[7937, 65] = N364 Perc Kit
    Drum[7937, * ] = 1

    Below code work to change between banks, and the code to select patches in bank simple “except it do not work in drumbank, because it is just patches?”
    function sendBankN364(){
    selectSequenserMode();
    bankNr=document.getElementById(“selBank”).selectedIndex;
    //alert(bankNr);
    if (bankNr<6 && bankNr>1) {selectProgramMode();bankNr=bankNr-2;synthMode=”instrument”;GM=0}
    else if (bankNr>5){selectCombiMode();bankNr=bankNr-6;synthMode=”combi”;GM=0}
    else if (bankNr==1){selectProgramMode();GM=56;bankNr=0;}
    else if (bankNr==0){selectProgramMode();GM=62;bankNr=0;}
    //alert(bankNr);
    settingChange = [176,0,GM];
    outportarr[outportindex].send(settingChange);
    settingChange = [176,32,bankNr];
    outportarr[outportindex].send(settingChange);
    settingChange = [192,0];
    outportarr[outportindex].send(settingChange);
    }

    function selectSequenserMode(){
    settingChange=[0xf0,0x42,0x30,0x35,0x4e,0x04,0x00,0xf7];
    outportarr[outportindex].send(settingChange);
    }

    function selectCombiMode(){
    settingChange=[0xf0,0x42,0x30,0x35,0x4e,0x00,0x00,0xf7];
    outportarr[outportindex].send(settingChange);
    }

    function selectProgramMode(){
    settingChange=[0xf0,0x42,0x30,0x35,0x4e,0x02,0x00,0xf7];
    outportarr[outportindex].send(settingChange);
    }

    function sendProgram() {
    //Set program on the track
    programTRX = document.getElementById(“prog_sel”).value;
    //Set channel
    sysexC = 192 + channelTRX-1;
    //Build message for midi synth
    settingChange = [sysexC, programTRX];
    //Send to midiport
    if (outportarr.length>0) {outportarr[outportindex].send(settingChange);}
    }

    #115214
    Possemo
    Possemo
    Participant
    • Topics: 13
    • Replies: 568
    • Total: 581
    • ★★★

    I am a bit familiar with this Korg mess as I am working on a Korg 05R/W panel ATM.

    First: you probably meant program Nr. 128 to 136 (not 236).

    Look at the midi implementation chart, page 214 of the manual. At the bottom program/bank changes are explained. Prog 128 to 136 do have special values (btw. very weird ones). The same applies to my Korg 05R/W.

    #115215

    JT64
    Participant
    • Topics: 8
    • Replies: 20
    • Total: 28

    Well that is such a total mess, i do not even know where to begin to decrypt that one.
    They really sucked writing manuals back in the days.

    Well in javascript to reach drum bank first you set mode by first sending type of setting message.

    settingChange=[0xf0,0x42,0x30,0x35,0x4e,0x02,0x00,0xf7];
    outportarr[outportindex].send(settingChange);
    Ok so now we are in program mode, where our drums is.

    Next we need the message to drumbank.
    GM=62;bankNr=0;
    //The two control messages
    settingChange = [176,0,GM];
    outportarr[outportindex].send(settingChange);
    settingChange = [176,32,bankNr];

    //And then you must send a program change i guess this must be program 0 but it ends up being 128?

    settingChange = [192,0];
    outportarr[outportindex].send(settingChange);

    So the above works, but what numbers to use for program 129,130,131,132,133,134,135,136 i don’t get it?

    settingChange = [192,x]; ???

    You have any idea for those other kits, 192,0 is defintily working for program “kit” at 128 but that may just be fluke.
    And 192,1 192,2 and so on definitly do not.

    You have an idea or hint, because that manual is awful.

    #115216

    JT64
    Participant
    • Topics: 8
    • Replies: 20
    • Total: 28

    I do not even get what the below means, is it a three part message to send, ?
    3e must be 62 controler 0 message
    And 00 contoller 32 message?
    So what is the last byte, something like?
    settingChange = [192,25]; for prg 131 ?
    settingChange = [192,16]; for prg 130 ?

    Well i just have to try i guess.

    3e,00,00 =129
    3e,00,10 =130
    3e,00,19 =131
    3e,00,20 =132
    3e,00,28 =133
    3e,00,40 =134
    3e,00,18 =135
    3e,00,30 =136

    #115217

    JT64
    Participant
    • Topics: 8
    • Replies: 20
    • Total: 28

    Well i tried to set the values sending just program change when at 129 i send program 16,24 and so on, did not work.
    But maybe they must be part of a full bank message, probably…

    I will contruct those and report on success and failure.
    It is kind of weird with bank changes that just change programs in the GM bank.

    • This reply was modified 1 month, 1 week ago by  JT64.
    #115223
    Possemo
    Possemo
    Participant
    • Topics: 13
    • Replies: 568
    • Total: 581
    • ★★★


    3e,00,00 =129
    3e,00,10 =130
    3e,00,19 =131
    3e,00,20 =132
    3e,00,28 =133
    3e,00,40 =134
    3e,00,18 =135
    3e,00,30 =136

    These are combined bank / program change values.

    Here a snippet of my Korg 05R/W code. Change to program Nr. 136:

            -- select bank 3
            panel:sendMidiMessageNow(CtrlrMidiMessage(bankSelect.."00 3e"))
            -- select patch
            panel:sendMidiMessageNow(CtrlrMidiMessage(programChange.."30"))

    With Lua for Ctrlr it is a thousand times easier to do and this is just a snippet but I think you will get the point.

    • This reply was modified 1 month, 1 week ago by Possemo Possemo.
    • This reply was modified 1 month, 1 week ago by Possemo Possemo.
    #115243

    JT64
    Participant
    • Topics: 8
    • Replies: 20
    • Total: 28

    Yeah it works, program change in the drumbank of N-series and its cousins do need a full bank message to be set.

    It get a bit messy codewise either drop the kits as banks in bank optionlist. Or make a special case for programs in “drum/GM bank”.

    And special cases does not feel right, i think i list the kits as individual banks in option list, because they all need a bank message. And i already have the messages for Korg N364 in an own file.

    So i keep the generality of program change.

Viewing 14 posts - 1 through 14 (of 14 total)

You must be logged in to reply to this topic.

There is currently 0 users and 22 guests online
No users are currently active
Forum Statistics
Threads: 2,233, Posts: 15,732, Members: 55,748
Most users ever online was 12 on January 22, 2019 3:47 pm
Do NOT follow this link or you will be banned from the site!