public void KeyOn(byte note, byte velo, TownsAudio_WaveTable w) { SetupLoop(w.loopStart, w.loopLen); SetNote(note, w, _reserved); SetVelo(velo); if (_reserved) { _activeEffect = true; } else { _keyPressed = _activeKey = true; } _activeOutput = true; }
void SetNote(byte note, TownsAudio_WaveTable w, bool stepLimit) { _note = note; sbyte diff = (sbyte)(_note - w.baseNote); ushort r = (ushort)(w.rate + w.rateOffs); ushort bl = 0; uint s = 0; if (diff < 0) { diff *= -1; bl = (ushort)(diff % 12); diff /= 12; s = (uint)(r >> diff); if (bl != 0) { s = (s * _pcmPhase2[bl]) >> 16; } } else if (diff > 0) { bl = (ushort)(diff % 12); diff /= 12; s = (uint)(r << diff); if (bl != 0) { s += ((s * _pcmPhase1[bl]) >> 16); } } else { s = r; } _stepNote = (ushort)(s & 0xffff); _step = (ushort)((s * _stepPitch) >> 14); if (stepLimit && _step > 2048) { _step = 2048; } }
public int InitInstrument(ref byte note, TownsAudio_WaveTable[] tables, int numTables, out TownsAudio_WaveTable table) { int i = 0; table = null; for (; i < 8; i++) { if (note <= _curInstrument[16 + 2 * i]) break; } if (i == 8) return 8; var d = (i << 3) + 64; _envTotalLevel = _curInstrument[d]; _envAttackRate = _curInstrument[d + 1]; _envDecayRate = _curInstrument[d + 2]; _envSustainLevel = _curInstrument[d + 3]; _envSustainRate = _curInstrument[d + 4]; _envReleaseRate = _curInstrument[d + 5]; _envStep = 0; note += _curInstrument[d + 6]; int id = _curInstrument.ToInt32(i * 4 + 32); for (i = 0; i < numTables; i++) { if (id == tables[i].id) break; } if (i == numTables) return 9; table = tables[i]; return 0; }
public int InitInstrument(ref byte note, TownsAudio_WaveTable[] tables, int numTables, out TownsAudio_WaveTable table) { int i = 0; table = null; for (; i < 8; i++) { if (note <= _curInstrument[16 + 2 * i]) { break; } } if (i == 8) { return(8); } var d = (i << 3) + 64; _envTotalLevel = _curInstrument[d]; _envAttackRate = _curInstrument[d + 1]; _envDecayRate = _curInstrument[d + 2]; _envSustainLevel = _curInstrument[d + 3]; _envSustainRate = _curInstrument[d + 4]; _envReleaseRate = _curInstrument[d + 5]; _envStep = 0; note += _curInstrument[d + 6]; int id = _curInstrument.ToInt32(i * 4 + 32); for (i = 0; i < numTables; i++) { if (id == tables[i].id) { break; } } if (i == numTables) { return(9); } table = tables[i]; return(0); }
public void LoadData(TownsAudio_WaveTable w) { _data = w.data; _dataEnd = w.size; }
void SetNote(byte note, TownsAudio_WaveTable w, bool stepLimit) { _note = note; sbyte diff = (sbyte)(_note - w.baseNote); ushort r = (ushort)(w.rate + w.rateOffs); ushort bl = 0; uint s = 0; if (diff < 0) { diff *= -1; bl = (ushort)(diff % 12); diff /= 12; s = (uint)(r >> diff); if (bl != 0) s = (s * _pcmPhase2[bl]) >> 16; } else if (diff > 0) { bl = (ushort)(diff % 12); diff /= 12; s = (uint)(r << diff); if (bl != 0) s += ((s * _pcmPhase1[bl]) >> 16); } else { s = r; } _stepNote = (ushort)(s & 0xffff); _step = (ushort)((s * _stepPitch) >> 14); if (stepLimit && _step > 2048) _step = 2048; }
public void KeyOn(byte note, byte velo, TownsAudio_WaveTable w) { SetupLoop(w.loopStart, w.loopLen); SetNote(note, w, _reserved); SetVelo(velo); if (_reserved) _activeEffect = true; else _keyPressed = _activeKey = true; _activeOutput = true; }