Beispiel #1
0
 /// <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);
 }
Beispiel #2
0
 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);
Beispiel #6
0
 internal static extern int midiInOpen(
     out IntPtr lphMidiIn,
     int uDeviceID,
     MidiInProc dwCallback,
     IntPtr dwCallbackInstance,
     int dwFlags);
Beispiel #7
0
        /// <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);
Beispiel #9
0
        /// <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);
        }
Beispiel #10
0
 private static extern int midiInOpen(ref int handle, int deviceId,
     MidiInProc proc, int instance, int flags);
			public MidiIn() 
			{
				messageHandler = new MidiInProc(OnMessage);    
			}
Beispiel #12
0
        /// <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());
        }
Beispiel #13
0
 public static extern int midiInOpen(out int lphMidiIn, int uDeviceID,
                 MidiInProc dwCallback, int dwInstance, int dwFlags);
Beispiel #14
0
 public static extern int midiInOpen(ref int handle, int deviceID, MidiInProc proc, int instance, int flags);
Beispiel #15
0
 internal static extern int midiInOpen(
     out IntPtr lphMidiIn,
     int uDeviceID,
     MidiInProc dwCallback,
     IntPtr dwCallbackInstance,
     int dwFlags);