void RecalculateRates()
{
int k = _keyScale2;
int r = (_specifiedAttackRate != 0) ? (int)((_specifiedAttackRate << 1) + 0x20) : 0;
fs_a.rate = ((r + k) < 94) ? _rateTbl[r + k] : (byte)136;
fs_a.shift = ((r + k) < 94) ? _rshiftTbl[r + k] : (byte)0;
r = (_specifiedDecayRate != 0) ? (int)((_specifiedDecayRate << 1) + 0x20) : 0;
fs_d.rate = _rateTbl[r + k];
fs_d.shift = _rshiftTbl[r + k];
r = (_specifiedSustainRate != 0) ? (int)((_specifiedSustainRate << 1) + 0x20) : 0;
fs_s.rate = _rateTbl[r + k];
fs_s.shift = _rshiftTbl[r + k];
r = (int)((_specifiedReleaseRate << 2) + 0x22);
fs_r.rate = _rateTbl[r + k];
fs_r.shift = _rshiftTbl[r + k];
}