bankSysex[1] |= (byte)((p.sysex[28] & 0x78) << 1);
bankSysex[1] |= (byte)((((Patch)p).sysex[28] & 0x78) << 1);
  public void putPatch(Patch bank, Patch p, int patchNum)  {    if (!canHoldPatch(p))    {      ErrorMsg.reportError("Error", "This type of patch does not fit in to this type of bank.");      return;    }    byte bankSysex[] = new byte[32];    // DCO ENV MODE    bankSysex[5] |= (byte)((p.sysex[7] & 0x02) << 6);    bankSysex[6] |= (byte)((p.sysex[7] & 0x01) << 7);    // VCF ENV MODE    bankSysex[7] |= (byte)((p.sysex[8] & 0x02) << 6);    bankSysex[8] |= (byte)((p.sysex[8] & 0x01) << 7);    // VCA ENV MODE    bankSysex[9] |= (byte)((p.sysex[9] & 0x02) << 6);    bankSysex[10] |= (byte)((p.sysex[9] & 0x01) << 7);    // DCO WAVEFORM PULSE    bankSysex[17] |= (byte)((p.sysex[10] & 0x02) << 6);    bankSysex[18] |= (byte)((p.sysex[10] & 0x01) << 7);    // DCO WAVEFORM SAWTOOTH    bankSysex[14] |= (byte)((p.sysex[11] & 0x04) << 5);    bankSysex[15] |= (byte)((p.sysex[11] & 0x02) << 6);    bankSysex[16] |= (byte)((p.sysex[11] & 0x01) << 7);    // DCO WAVEFORM SUB    bankSysex[11] |= (byte)((p.sysex[12] & 0x04) << 5);    bankSysex[12] |= (byte)((p.sysex[12] & 0x02) << 6);    bankSysex[13] |= (byte)((p.sysex[12] & 0x01) << 7);    // DCO RANGE    bankSysex[21] |= (byte)((p.sysex[13] & 0x02) << 6);    bankSysex[22] |= (byte)((p.sysex[13] & 0x01) << 7);    // DCO SUB LEVEL    bankSysex[23] |= (byte)((p.sysex[14] & 0x02) << 6);    bankSysex[24] |= (byte)((p.sysex[14] & 0x01) << 7);    // DCO NOISE LEVEL    bankSysex[25] |= (byte)((p.sysex[15] & 0x02) << 6);    bankSysex[26] |= (byte)((p.sysex[15] & 0x01) << 7);    // HPF CUTOFF FREQ    bankSysex[19] |= (byte)((p.sysex[16] & 0x02) << 6);    bankSysex[20] |= (byte)((p.sysex[16] & 0x01) << 7);    // CHORUS    bankSysex[4] |= (byte)((p.sysex[17] & 0x01) << 7);    // DCO LFO MOD DEPTH    bankSysex[3] |= p.sysex[18];    // DCO ENV MOD DEPTH    bankSysex[4] |= p.sysex[19];    // DCO AFTER DEPTH (sysex docs say 0-127 value, but real range is 0-15 and it's stored shifted)    bankSysex[0] |= (byte)((p.sysex[20] & 0x78) << 1);    // DCO PW/PWM DEPTH    bankSysex[5] |= p.sysex[21];    // DCO PWM RATE    bankSysex[6] |= p.sysex[22];    // VCF CUTOFF FREQ    bankSysex[7] |= p.sysex[23];    // VCF RESONANCE    bankSysex[8] |= p.sysex[24];    // VCF LFO MOD DEPTH    bankSysex[10] |= p.sysex[25];    // VCF ENV MOD DEPTH    bankSysex[9] |= p.sysex[26];    // VCF KEY FOLLOW (sysex docs say 0-127 value, but real range is 0-15 and it's stored shifted)    bankSysex[0] |= (byte)((p.sysex[27] & 0x78) >> 3);    // VCF AFTER DEPTH (sysex docs say 0-127 value, but real range is 0-15 and it's stored shifted)    bankSysex[1] |= (byte)((p.sysex[28] & 0x78) << 1);    // VCA LEVEL    bankSysex[11] |= p.sysex[29];    // VCA AFTER DEPTH (sysex docs say 0-127 value, but real range is 0-15 and it's stored shifted)    bankSysex[1] |= (byte)((p.sysex[30] & 0x78) >> 3);    // LFO RATE    bankSysex[12] |= p.sysex[31];    // LFO DELAY TIME    bankSysex[13] |= p.sysex[32];    // ENV T1    bankSysex[14] |= p.sysex[33];    // ENV L1    bankSysex[15] |= p.sysex[34];    // ENV T2    bankSysex[16] |= p.sysex[35];    // ENV L2    bankSysex[17] |= p.sysex[36];    // ENV T3    bankSysex[18] |= p.sysex[37];    // ENV L3    bankSysex[19] |= p.sysex[38];    // ENV T4    bankSysex[20] |= p.sysex[39];    // ENV KEY FOLLOW (sysex docs say 0-127 value, but real range is 0-15 and it's stored shifted)    bankSysex[2] |= (byte)((p.sysex[40] & 0x78) << 1);    // CHORUS RATE    bankSysex[27] |= (byte)((p.sysex[41] & 0x03) << 6);    bankSysex[28] |= (byte)((p.sysex[41] & 0x0C) << 4);    bankSysex[29] |= (byte)((p.sysex[41] & 0x30) << 2);    bankSysex[30] |= (byte)(p.sysex[41] & 0x40);    // BENDER RANGE    bankSysex[2] |= p.sysex[40];    // TONE NAME (10 bytes)    for (int i = 0; i < 10; i++)    {      bankSysex[i+21] |= p.sysex[43+i];    }    byte bankSysexNibbles[] = new byte[64];    for (int i = 0; i < 32; i++)    {      bankSysexNibbles[i*2] = (byte)(bankSysex[i] & 0x0F);      bankSysexNibbles[i*2+1] = (byte)((bankSysex[i] & 0xF0) >> 4);    }    int patchOffset = getPatchStart(patchNum);    System.arraycopy(bankSysexNibbles, 0, bank.sysex, patchOffset, 64);  }