private void Callback(IntPtr midiInHandle, MidiInterop.MidiInMessage message, IntPtr userData, IntPtr messageParameter1, IntPtr messageParameter2) { switch(message) { case MidiInterop.MidiInMessage.Open: // message Parameter 1 & 2 are not used break; case MidiInterop.MidiInMessage.Data: // parameter 1 is packed MIDI message // parameter 2 is milliseconds since MidiInStart if (MessageReceived != null) { MessageReceived(this, new MidiInMessageEventArgs(messageParameter1.ToInt32(), messageParameter2.ToInt32())); } break; case MidiInterop.MidiInMessage.Error: // parameter 1 is invalid MIDI message if (ErrorReceived != null) { ErrorReceived(this, new MidiInMessageEventArgs(messageParameter1.ToInt32(), messageParameter2.ToInt32())); } break; case MidiInterop.MidiInMessage.Close: // message Parameter 1 & 2 are not used break; case MidiInterop.MidiInMessage.LongData: // parameter 1 is pointer to MIDI header // parameter 2 is milliseconds since MidiInStart break; case MidiInterop.MidiInMessage.LongError: // parameter 1 is pointer to MIDI header // parameter 2 is milliseconds since MidiInStart break; case MidiInterop.MidiInMessage.MoreData: // parameter 1 is packed MIDI message // parameter 2 is milliseconds since MidiInStart break; } }
private void Callback(IntPtr midiInHandle, MidiInterop.MidiOutMessage message, IntPtr userData, IntPtr messageParameter1, IntPtr messageParameter2) { }
/// <summary> /// Opens a specified MIDI out device /// </summary> /// <param name="deviceNo">The device number</param> public MidiOut(int deviceNo) { this.callback = new MidiInterop.MidiOutCallback(Callback); MmException.Try(MidiInterop.midiOutOpen(out hMidiOut, (IntPtr)deviceNo, callback, IntPtr.Zero, MidiInterop.CALLBACK_FUNCTION), "midiOutOpen"); }
/// <summary> /// Sends a MIDI message to the MIDI out device /// </summary> /// <param name="message">The message to send</param> public void Send(int message) { MmException.Try(MidiInterop.midiOutShortMsg(hMidiOut, message), "midiOutShortMsg"); }
/// <summary> /// Reset the MIDI in device /// </summary> public void Reset() { MmException.Try(MidiInterop.midiInReset(hMidiIn), "midiInReset"); }
/// <summary> /// Stop the MIDI in device /// </summary> public void Stop() { MmException.Try(MidiInterop.midiInStop(hMidiIn), "midiInStop"); }
/// <summary> /// Start the MIDI in device /// </summary> public void Start() { MmException.Try(MidiInterop.midiInStart(hMidiIn), "midiInStart"); }