private void OnMidiMessageReceived(MidiInPort sender, MidiMessageReceivedEventArgs args)
{
// Console.WriteLine("OnMidiMessageReceived: " + args.Message.Type);
switch (args.Message.Type)
{
case MidiMessageType.NoteOn:
var noteOnMessage = args.Message as MidiNoteOnMessage;
// a zero-velocity note-on message is equivalent to note-off
if (noteOnMessage.Velocity == 0 && TranslateZeroVelocityNoteOnMessage)
{
var ev1 = NoteOffMessageReceived;
if (ev1 != null)
ev1(this, new MidiNoteOffMessageReceivedEventArgs(noteOnMessage.Channel, noteOnMessage.Note, noteOnMessage.Velocity, true));
}
else
{
// normal note on message
var ev2 = NoteOnMessageReceived;
if (ev2 != null)
{
try
{
ev2(this, new MidiNoteOnMessageReceivedEventArgs(noteOnMessage.Channel, noteOnMessage.Note, noteOnMessage.Velocity));
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
}
break;
case MidiMessageType.NoteOff:
var noteOffMessage = args.Message as MidiNoteOffMessage;
var ev3 = NoteOffMessageReceived;
if (ev3 != null)
ev3(this, new MidiNoteOffMessageReceivedEventArgs(noteOffMessage.Channel, noteOffMessage.Note, noteOffMessage.Velocity, false));
break;
case MidiMessageType.ControlChange:
var ccMessage = args.Message as MidiControlChangeMessage;
var ev4 = ControlChangeMessageReceived;
if (ev4 != null)
ev4(this, new MidiControlChangeMessageReceivedEventArgs(ccMessage.Channel, ccMessage.Controller, ccMessage.ControlValue));
break;
case MidiMessageType.ProgramChange:
var programMessage = args.Message as MidiProgramChangeMessage;
var ev5 = ProgramChangeMessageReceived;
if (ev5 != null)
ev5(this, new MidiProgramChangeMessageReceivedEventArgs(programMessage.Channel, programMessage.Program));
break;
case MidiMessageType.PitchBendChange:
var pitchBendChangeMessage = args.Message as MidiPitchBendChangeMessage;
var ev6 = PitchBendChangeMessageReceived;
if (ev6 != null)
ev6(this, new MidiPitchBendChangeMessageReceivedEventArgs(pitchBendChangeMessage.Channel, pitchBendChangeMessage.Bend));
break;
// TODO: Add more message types
default:
// message type we don't handle above. Ignore
break;
}
}