private void OnMessage(IntPtr hMidi, MidiMessage wMsg, IntPtr dwInstance, IntPtr dwParam1, IntPtr dwParam2) { if (!IsListeningForEvents) { return; } switch (wMsg) { case MidiMessage.MIM_DATA: case MidiMessage.MIM_MOREDATA: OnShortMessage(dwParam1.ToInt32()); break; case MidiMessage.MIM_LONGDATA: OnSysExMessage(dwParam1); break; case MidiMessage.MIM_ERROR: byte statusByte, firstDataByte, secondDataByte; MidiWinApi.UnpackShortEventBytes(dwParam1.ToInt32(), out statusByte, out firstDataByte, out secondDataByte); OnInvalidShortEventReceived(statusByte, firstDataByte, secondDataByte); break; case MidiMessage.MIM_LONGERROR: OnInvalidSysExEventReceived(MidiWinApi.UnpackSysExBytes(dwParam1)); break; } }
private void OnSysExEventSent(IntPtr sysExHeaderPointer) { byte[] data = null; try { data = MidiWinApi.UnpackSysExBytes(sysExHeaderPointer); var midiEvent = new NormalSysExEvent(data); OnEventSent(midiEvent); UnprepareSysExBuffer(sysExHeaderPointer); _sysExHeadersPointers.Remove(sysExHeaderPointer); } catch (Exception ex) { var exception = new MidiDeviceException("Failed to parse sent system exclusive event.", ex); exception.Data.Add("Data", data); OnError(exception); } }
private void OnSysExMessage(IntPtr sysExHeaderPointer) { byte[] data = null; try { data = MidiWinApi.UnpackSysExBytes(sysExHeaderPointer); var midiEvent = new NormalSysExEvent(data); OnEventReceived(midiEvent); UnprepareSysExBuffer(sysExHeaderPointer); PrepareSysExBuffer(); } catch (Exception ex) { var exception = new MidiDeviceException($"Failed to parse system exclusive message.", ex); exception.Data.Add("Data", data); OnError(exception); } }