Menu

#542 Support Alternative Bank Select Methods

None
feedback
None
5
3 days ago
2026-02-05
Ted Felix
No

Some older synths use obscure bank select methods. Cakewalk/Sonar INS files offer a BankSelMethod to choose amongst them. E.g. BankSelMethod=3 means that PCs above 100 switch banks. This is used in the TG77.

We should research the BankSelMethod values and figure out what each one does. Then we should add support for them.

See ChannelManager::insertChannelSetup() which assembles a channel setup based on the setting in the MIPP.

Discussion

  • Ted Felix

    Ted Felix - 2026-02-05

    Requested by Arne. See this message on the user list.

     
  • Ted Felix

    Ted Felix - 2026-02-05
    • Description has changed:

    Diff:

    --- old
    +++ new
    @@ -1,4 +1,4 @@
    -Some older synths use obscure bank select methods.  Cakewalk/Sonar INS files offer a BankSelMethod to choose amongst them.  E.g. BankSelMethod=3 means that PCs above 100 switch banks.  This is used in the TG77.
    +Some older synths use obscure bank select methods.  Cakewalk/Sonar INS files offer a `BankSelMethod` to choose amongst them.  E.g. BankSelMethod=3 means that PCs above 100 switch banks.  This is used in the TG77.
    
     We should research the BankSelMethod values and figure out what each one does.  Then we should add support for them.
    
     
  • Ted Felix

    Ted Felix - 2026-02-05

    According to this site:

    https://tse3.sourceforge.net/doc/InsFiles.html

    The BankSelMethod values are as follows:

    Value Meaning
    0 Normal - bank select MSB and LSB matter
    1 Only the MSB is used and defined
    2 Only the LSB is used and defined
    3 Only program changes are used and defined

    We support 0, 1, and 2 directly by simply defining bank selects where they are needed. We support 3 as described above through use of the checkboxes on the MIPP. E.g. for the DX7 you absolutely have to turn off BSs or it will crash.

    3 as described above doesn't imply what is going on in the TG77. It's almost like we need a new TG77 mode. Or perhaps a more general feature where BSs can be mapped to PCs.

     

    Last edit: Ted Felix 2026-02-05
  • Arne

    Arne - 2026-02-05

    Hi, I'm the one who inquired about this on the mailing list.

    Cakewalk BankSelMethod=3 is described better here:
    https://legacy.cakewalk.com/Documentation?product=Cakewalk&language=3&help=Instrument_Defs.07.html

    quote:

    Patch 100...127 Instruments that let you change banks by sending patch changes between 100 and 127

    This is exactly what the TG77 (and its brother the SY77) uses, this method is used by quite a few synths from the 80s to early 90s.

    I tried this from a terminal, by sending the following MIDI strings using amidi:
    amidi -p "hw:2,0,2" -S "C0 75 C0 3F"
    This switches the TG77 to the 'Preset 2' bank 75(hex) = 117(dec) and then selects patch 3F(hex)=63(dec) within this bank.

    The TG77 has 4 Banks (Preset 1, Preset 2, Internal, Card) and to each bank a specific program change number in the range 100-127 is assigned to it which has to be sent before the actual program change (in the range 0-63) to select a patch.

    If you only send a single program change then it simply switches to that patch number within the current bank as would be expected.

    I have quite a collection of Cakewalk INS files and with a quick grep for BankSelMethod=3 I found that the following synths use this bank change method:

    Digitech GSP-2101
    Kurzweil 1000PX
    Korg T3
    Ensoniq VFX
    Ensoniq KS-32
    Ensoniq SQ1
    Alesis S5+
    Yamaha SY77
    Yamaha TG77

    This list is likely not complete as I don't have INS files for every synth ever made (far from it).

     

    Last edit: Arne 2026-02-05
  • Arne

    Arne - 2026-02-05

    The following article from the famous 'Sound on Sound' magazine (Sept. 1993) might be helpful too, it also describes this bank select method used by the SY77/TG77 (and other synths):
    https://www.muzines.co.uk/articles/bank-managing/10718

    I also own a Matrix 1000 which also uses an uncommon bank select method that is also described in the article linked above.
    If the bank select method of the Matrix 1000 could be implemented in Rosegarden and in the rgd files too that would be absolutely great, not even Cakewalk/Sonar seems to support it, see:
    http://forum.cakewalk.com/Oberheim-Matrix-1000-bank-change-m1214882.aspx

     
  • Arne

    Arne - 2026-02-06

    Just for confirmation I tested the bank switch method of the Oberheim Matrix-1000 with amidi:

    The following MIDI string (all in hex) will switch to Bank 4 Patch 31 =1F(hex):

    amidi -p "hw:2,0,1" -S "B01F7F C004 B01F00 C01F"

    And the following will switch to Bank 7 Patch 64=40(hex):

    amidi -p "hw:2,0,1" -S "B01F7F C007 B01F00 C040"

    Basically switching banks is done using a program change preceded by CC31 with any value in the range 40-7F(hex) and followed again by CC31 with any value below 40(hex) (I guess zero is best to avoid leaving this CC with a non zero value).

     

    Last edit: Arne 2026-02-06
  • Ted Felix

    Ted Felix - 2026-02-06

    Thanks for all of that. So BankSelMethod=3 really is specifically PC100+ treated as bank select. That makes it a lot easier to implement since it is so specific.

    Sounds like we need to offer two new bank select modes. One where PC100+ are treated as bank selects and a Matrix-1000 mode. How about we call them:

    1. Normal
    2. PC100+ (Yamaha SY77, etc...)
    3. Mod Wheel (Matrix-1000)

    Does this look reasonable?

     
  • Arne

    Arne - 2026-02-06

    That looks reasonable to me with one correction:

    the Matrix-1000 can use either the ModWheel (CC01) or CC31 to switch banks, but from a sequencer program it's best to use CC31, and not the ModWheel, as changing the ModWheel value could interfere with the sound being played, while CC31 isn't used for anything else.

    So I would suggest calling the third mode 'CC31' and also implement it using CC31 like in the amidi examples in my previous post.

     
  • Ted Felix

    Ted Felix - 5 days ago
    • assigned_to: Ted Felix
     
  • Ted Felix

    Ted Felix - 5 days ago

    Just pushed some support for this as [1e0bb1]. Please test latest git.

    There is no support in the bank editor UI yet. You can only get to it via the .rgd file. I've added a new bankselecttype attribute to the device tag:

    <device id="0" name="GM" direction="play" variation="" connection="" bankselecttype="0" type="midi">
    

    Possible values for bankselecttype:

    Value Meaning
    "0" Normal bank selects are sent out.
    "1" PC100+ mode for TG77
    "2" CC31 mode for matrix-1000

    For PC100+ mode, bank LSBs 100-127 are sent as PCs before the actual PC is sent.

    For CC31, the bank LSB is sent as a PC sandwiched between CC31 127 and 0 events.

    You should be able to modify your .rgd files and start using this immediately. Let me know if it works. I haven't done any testing yet, but I'm going to try monitoring the output with some fake data to see if it is working.

    Also be sure to test standard MIDI file export. This should be using the same code as real-time playback. It should look correct and play back correctly.

     

    Related

    Commit: [1e0bb1]

  • Ted Felix

    Ted Felix - 5 days ago

    Tested playback with aseqdump and standard midi file export. All look good. MIDI file seems to have duplicate program changes, but shouldn't hurt anything.

    UI is next.

     
  • Arne

    Arne - 5 days ago

    Thanks a lot for implementing this so quickly, that's a pleasant surprise, I really didn't expect that!
    But I must be doing something wrong as Rosegarden is still sending Bankselect MSB+LSB (CC0+CC32) despite having specified bankselecttype="1".

    I used the link here on SF to download the latest git snapshot, built it according to the instructions in the README and then imported the rgd file I created for the TG77 with bankselecttype="1" and connected it to the MIDI out device to which the TG77 is connected.
    Then I assigned the TG77 to track 1 in Rosegarden and tried switching banks.

    But aseqdump is still showing CC0+CC32 being sent and the TG77 is not switching banks, only programs inside the current bank.

    In the screenshot you can see in the terminal on the right the top part of the TG77 rgd file and in the center terminal you can see the output of aseqdump.

    Can you maybe spot a mistake in the header of my rgd file or have any other idea what I did wrong?

     

    Last edit: Arne 5 days ago
  • Arne

    Arne - 5 days ago

    Here is the complete TG77 RGD file I used for testing:

     
  • Ted Felix

    Ted Felix - 4 days ago

    Just pushed a fix [5120de]. Please test latest git.

    The problem was that importing the banks from the rgd file was not copying the bankselecttype from the .rgd to the .rg file. Try importing the banks again. Make sure you select "Overwrite banks" when importing. (It will not copy if it is in "Merge banks" mode and that is on purpose. It will make sense when the UI is finished.)

    Thanks for the quick testing.

     

    Related

    Commit: [5120de]

  • Ted Felix

    Ted Felix - 4 days ago

    Just pushed [50fc74]. Please test latest git.

    These changes provide the UI for bank select type in the lower right corner "Options" group box in the "Manage MIDI Banks and Programs" bank editor. Studio > Import Studio from File... now handles bank select type properly.

    I might look into some sort of indication as to what MSB and LSB mean in these new modes. But this is pretty much done. Let me know if anything isn't working as expected.

     

    Related

    Commit: [50fc74]

  • Ted Felix

    Ted Felix - 4 days ago
    • status: open --> feedback
     
  • Arne

    Arne - 4 days ago

    Many thanks, I built the latest git master and tested the TG77 rgd file and can confirm that bank switching now works fine with the TG77.

    I didn't have the time to test the Matrix-1000 yet, but should be able to do that within a day or so, I will report back again after doing that.

     
  • Ted Felix

    Ted Felix - 3 days ago

    Sounds great. Thanks for testing.

    I just updated the documentation for the bank editor dialog. Please review:

    https://www.rosegardenmusic.com/wiki/doc:bankeditordialog-en

    Also, if you can send final versions of your generic .rgd files (TG77 and Matrix-1000) for inclusion in the next release of rg, I would appreciate it. Any others that aren't already shipped with rg would be appreciated as well.

     
  • Arne

    Arne - 3 days ago

    The documentation looks good to me.
    I have also managed to test bank switching with the Matrix-1000 with bankselecttype="2" in the rgd file and it works great.
    Thanks again.

    In the coming weeks or so I will send you via the mailing list a whole bunch of .rgd files that I've been working on (on and off for the past few weeks) as soon as they are complete.

     

Log in to post a comment.