/** The constructor. */
  public RolandGP16SingleDriver() {
    super("Single", "Mikael Kurula");
    sysexID = "F041**2A";

    patchSize = HSIZE + SSIZE + 1;
    patchNameStart = 108;
    patchNameSize = 16;
    deviceIDoffset = 2;
    checksumStart = HSIZE;
    checksumEnd = HSIZE + SSIZE - 2;
    checksumOffset = HSIZE + SSIZE - 1;

    bankNumbers = new String[8 * 2];
    System.arraycopy(DriverUtil.generateNumbers(1, 8, "Group A - Bank ##"), 0, bankNumbers, 0, 8);
    System.arraycopy(DriverUtil.generateNumbers(1, 8, "Group B - Bank ##"), 0, bankNumbers, 8, 8);
    patchNumbers = new String[8 * 1];
    System.arraycopy(DriverUtil.generateNumbers(1, 8, "Patch ##"), 0, patchNumbers, 0, 8);
  }
 Patch importFSEditor(byte[] aBuffer) {
   Patch oBank = (Patch) YamahaFS1RBankDriver.getInstance().createNewPatch();
   int oIndex = 26;
   int oIDest = YamahaFS1RBankDriver.DATA_START;
   for (int p = 0; p < 128; p++) {
     oBank.sysex[oIDest++] = (byte) 0xF0;
     oBank.sysex[oIDest++] = (byte) 0x43;
     oBank.sysex[oIDest++] = (byte) 0x0;
     oBank.sysex[oIDest++] = (byte) 0x5E;
     int oCSStart = oIDest;
     oBank.sysex[oIDest++] = (byte) 0x03;
     oBank.sysex[oIDest++] = (byte) 0x10;
     oBank.sysex[oIDest++] = (byte) 0x11;
     oBank.sysex[oIDest++] = (byte) 0;
     oBank.sysex[oIDest++] = (byte) p;
     for (int b = 0; b < YamahaFS1RPerformanceDriver.PATCH_SIZE; b++) {
       oBank.sysex[oIDest++] = aBuffer[oIndex++];
     }
     int oCSEnd = oIDest - 1;
     oIDest++;
     oBank.sysex[oIDest++] = (byte) 0xF7;
     DriverUtil.calculateChecksum(oBank.sysex, oCSStart, oCSEnd, oCSEnd + 1);
   }
   for (int v = 0; v < 128; v++) {
     oBank.sysex[oIDest++] = (byte) 0xF0;
     oBank.sysex[oIDest++] = (byte) 0x43;
     oBank.sysex[oIDest++] = (byte) 0x0;
     oBank.sysex[oIDest++] = (byte) 0x5E;
     int oCSStart = oIDest;
     oBank.sysex[oIDest++] = (byte) 0x04;
     oBank.sysex[oIDest++] = (byte) 0x60;
     oBank.sysex[oIDest++] = (byte) 0x51;
     oBank.sysex[oIDest++] = (byte) 0;
     oBank.sysex[oIDest++] = (byte) v;
     for (int b = 0; b < YamahaFS1RVoiceDriver.PATCH_SIZE; b++) {
       oBank.sysex[oIDest++] = aBuffer[oIndex++];
     }
     int oCSEnd = oIDest - 1;
     oIDest++;
     oBank.sysex[oIDest++] = (byte) 0xF7;
     DriverUtil.calculateChecksum(oBank.sysex, oCSStart, oCSEnd, oCSEnd + 1);
   }
   return oBank;
 }
 public EmuProteusMPSSingleDriver() {
   super("Single", "Brian Klock");
   sysexID = "F01808**01";
   // inquiryID="F07E..06021804040800.........F7";
   patchSize = 319;
   patchNameStart = 7;
   patchNameSize = 12;
   deviceIDoffset = 3;
   checksumStart = 7;
   checksumEnd = 316;
   checksumOffset = 317;
   bankNumbers =
       new String[] {"0-ROM Bank", "1-RAM Bank", "2-Card Bank", "3-ROM Bank", "4-ROM Bank"};
   patchNumbers = DriverUtil.generateNumbers(0, 99, "00-");
 }