/// <summary> /// Opens a MIDI input device. /// </summary> /// NOTE: This is adapted from the original Win32 function in order to make it typesafe. /// /// Win32 docs: http://msdn.microsoft.com/en-us/library/ms711610(VS.85).aspx public static MMRESULT midiInOpen(out HMIDIIN lphMidiIn, UIntPtr uDeviceID, MidiInProc dwCallback, UIntPtr dwCallbackInstance) { return midiInOpen(out lphMidiIn, uDeviceID, dwCallback, dwCallbackInstance, dwCallback == null ? MidiOpenFlags.CALLBACK_NULL : MidiOpenFlags.CALLBACK_FUNCTION); }
private static extern MMRESULT midiInOpen(out HMIDIIN lphMidiIn, UIntPtr uDeviceID, MidiInProc dwCallback, UIntPtr dwCallbackInstance, MidiOpenFlags dwFlags);
/// <summary> /// Start the IR Server plugin. /// </summary> public override void Start() { uint error; LoadSettings(); _stopping = false; _buffer = new StringBuilder(BufferLength); //MidiInProc _midiCallback = MidiInCallback; _midiHeader = new MidiHdr(); _midiHeader.data = Marshal.AllocHGlobal(BufferLength); _midiHeader.bufferLength = BufferLength; _midiHeader.flags = 0; error = midiInOpen(ref _midiInHandle, _midiIndex, _midiCallback, 0, CALLBACK_FUNCTION); if (error == MMSYSERR_NOERROR) { error = midiInPrepareHeader(_midiInHandle, ref _midiHeader, Marshal.SizeOf(typeof (MidiHdr))); if (error == MMSYSERR_NOERROR) { IntPtr iptMIDIHdrPtr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof (MidiHdr))); Marshal.StructureToPtr(_midiHeader, iptMIDIHdrPtr, true); error = midiInAddBuffer(_midiInHandle, (int) iptMIDIHdrPtr, Marshal.SizeOf(typeof (MidiHdr))); if (error == MMSYSERR_NOERROR) error = midiInStart(_midiInHandle); } } }
private static extern uint midiInOpen(ref int lphMidiIn, int uDeviceID, MidiInProc dwCallback, int dwInstance, int dwFlags);
public static extern int midiInOpen(out IntPtr handle, int deviceID, MidiInProc proc, IntPtr instance, int flags);
internal static extern int midiInOpen( out IntPtr lphMidiIn, int uDeviceID, MidiInProc dwCallback, IntPtr dwCallbackInstance, int dwFlags);
/// <summary> /// MIDI Input Port object constructor /// </summary> /// <param name="i"></param> public MidiInputPort(int i /*,Midi midi*/) : base(i /*, midi*/) { int dwInstance = i; // This can be any data we want NumMidiCallbacksReceived = 0; int dwFlags = MidiLibWrap.CALLBACK_FUNCTION; try { MidiLibWrap.MidiInCapabilities midiInCaps = new MidiLibWrap.MidiInCapabilities(); MidiLibWrap.midiInGetDevCaps(i, out midiInCaps, Marshal.SizeOf( typeof(MidiLibWrap.MidiInCapabilities))); m_Name = midiInCaps.Name; RC.WriteLine(string.Format("Input port name = {0}", m_Name)); m_SysExHeaderQueue = Queue.Synchronized(new Queue()); m_InputMethod = new MidiInProc( MidiCallback ); int rc = MidiLibWrap.midiInOpen(out m_MidiHandle, m_PortIndex, m_InputMethod, dwInstance, dwFlags); CreateHeaders(); // Initializes headers for system exclusive messages. for(int j = 0; j < HeaderCount; j++) { // Reset flags. m_Headers[j].flags = 0; // Imprint header structure onto raw memory. Marshal.StructureToPtr(m_Headers[j], m_HeadersPointers[j], false); // Prepare header. MidiLibWrap.midiInPrepareHeader(m_MidiHandle, m_HeadersPointers[j], Marshal.SizeOf(typeof(MidiLibWrap.MidiHeader))); // Add header to buffer. MidiLibWrap.midiInAddBuffer(m_MidiHandle, m_HeadersPointers[j], Marshal.SizeOf(typeof(MidiLibWrap.MidiHeader))); } // Clear system exclusive header queue. m_SysExHeaderQueue.Clear(); // Create thread for processing system exclusive headers. m_SysExHeaderThread = new Thread(new ThreadStart(ManageSysExHeaders)); // Start worker thread. m_SysExHeaderThread.Start(); rc = MidiLibWrap.midiInStart( m_MidiHandle ); } catch( Exception e ) { RC.WriteLine(string.Format("Error: {0}", e.Message)); } NumOpenInputPorts++; }
private static extern int midiInOpen(out IntPtr handle, int deviceID, MidiInProc proc, int instance, int flags);
/// <summary> /// Initializes input device. /// </summary> private void InitializeInputDevice() { // Create delegate for handling messages from Windows. messageHandler = new MidiInProc(OnMessage); // Create synchronized queue for messages. syncMsgQueue = Queue.Synchronized(messageQueue); }
private static extern int midiInOpen(ref int handle, int deviceId, MidiInProc proc, int instance, int flags);
public MidiIn() { messageHandler = new MidiInProc(OnMessage); }
/// <summary> /// Initializes input device. /// </summary> private void InitializeInputDevice() { // Create delegate for handling messages from Windows. messageHandler = new MidiInProc(OnMessage); // Create queue for holding system exclusive headers ready to be // processed. sysExHeaderQueue = Queue.Synchronized(new Queue()); }
public static extern int midiInOpen(out int lphMidiIn, int uDeviceID, MidiInProc dwCallback, int dwInstance, int dwFlags);
public static extern int midiInOpen(ref int handle, int deviceID, MidiInProc proc, int instance, int flags);