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; }
public MidiDevice(MidiIn midiInput, OnNoteOn onNoteOnListener, OnNoteOff onNoteOffListener) { _midiInput = midiInput; _onNoteOnListener = onNoteOnListener; _onNoteOffListener = onNoteOffListener; _midiInput.MessageReceived += OnMidiMessage; _midiInput.ErrorReceived += OnMidiError; _midiInput.Start(); }
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); } }
void SendMessages(Drums newState, XInput.GamepadEx state) { foreach (Drums d in Enum.GetValues(typeof(Drums))) { var note = DrumNoteMap[d](newState); if (newState.HasFlag(d) && !drumState.HasFlag(d)) { var velocity = VelocityFunctions[d](state); if (velocity > 127) { velocity = 127; } if (velocity < 32) { velocity = 32; } OnNoteOn?.Invoke(Channel, (Midi.Enums.Pitch)note, velocity); } else if (!newState.HasFlag(d) && drumState.HasFlag(d)) { OnNoteOff?.Invoke(Channel, (Midi.Enums.Pitch)note); } } }
private void NoteOn(NoteEventArgs noteEventArgs) { _pressedNotes.Add(noteEventArgs.NoteAbsolute); OnNoteOn?.Invoke(this, noteEventArgs); }
public void NotePressedFromUI(NoteEventArgs noteEventArgs) { OnNoteOn?.Invoke(this, noteEventArgs); }