public void ControllerEventHandler(XInput.GamepadEx state) { var newState = ProcessState(state); if (lastState == null) { lastState = newState; return; } if (state.wButtons.HasFlag(XInput.Buttons.A)) { OnControlChange?.Invoke(Channel.Channel1, Control.AllNotesOff, 0); } for (int i = 0; i < 6; i++) { if (lastState.Velocities[i] != newState.Velocities[i]) { newPitches[i] = (byte)(newState.Frets[i] + StandardTuning[i]); OnNoteOff?.Invoke(Channel.Channel1, (Pitch)lastPitches[i]); OnNoteOn?.Invoke(Channel.Channel1, (Pitch)newPitches[i], newState.Velocities[i]); } } // swap note buffers var temp = lastPitches; lastPitches = newPitches; newPitches = temp; // swap guitar state lastState = newState; }
private void ThreadRun() { while (true) { OnControlChange onControlChange = null; onControlChange = new OnControlChange(setMousePositionText); this.Invoke(onControlChange); } }
void SendMessages(bool[] newKeys, bool sustain, byte[] velocities) { int newVelocityStart = 0; int finalVelocity = 0; for (int i = 0; i < 5; i++) { if (velocities[i] != 0) { finalVelocity = i; if (velocityState[i] == velocities[i]) { newVelocityStart = i + 1; } } velocityState[i] = velocities[i]; } for (int i = 0; i < 25; i++) { var pitch = (Midi.Enums.Pitch)(i + offset); if (newKeys[i] && (0 == keyState[i])) { OnNoteOn?.Invoke(Channel, pitch, velocities[Math.Min(newVelocityStart, finalVelocity)]); keyState[i] = velocities[Math.Min(newVelocityStart, finalVelocity)]; newVelocityStart++; } else if (!newKeys[i] && (0 != keyState[i])) { OnNoteOff?.Invoke(Channel, pitch); keyState[i] = 0; } } if (sustain && !sustainState) { OnControlChange?.Invoke(Channel, Midi.Enums.Control.SustainPedal, 127); } else if (!sustain && sustainState) { OnControlChange?.Invoke(Channel, Midi.Enums.Control.SustainPedal, 0); } }
private void Ns_MemoryThreshold_ValueChanged(object sender, EventArgs e) { OnControlChange?.Invoke((int)ns_MemoryThreshold.Value, (int)ns_Opacity.Value, (int)ns_PollInterval.Value); }