void coreSignalHit(bool on, int ID) { if (keyStates[ID].nonSeqStateChange()) { keyStates[ID].currentNonSeqState = keyStates[ID].getNonSeqState(); _timeline.onTimelineEvent(ID, keyStates[ID].currentNonSeqState); } if (keyStates[ID].stateChange()) { on = keyStates[ID].currentState = keyStates[ID].getState(); keys[ID].phantomHit(on); } else { return; } if (on) { if (selectedKeys.Contains(ID)) { selectedKeys.Remove(ID); } selectedKeys.Insert(0, ID); } else { selectedKeys.Remove(ID); } if (!on) { signal.updateVoices(ID, on); _midiOut.OutputNote(on, ID); if (arpPattern != 0) { if (selectedKeys.Count == 1) { setKeyActive(selectedKeys[0], true); } } } else if (arpPattern == 0 || selectedKeys.Count < 2) { setKeyActive(ID, on); } }
public void trackUpdate(int trackID, bool on) { _timeline.onTimelineEvent(trackID, on); }