示例#1
0
        private void Callback(IntPtr midiInHandle, MidiInterop.MidiInMessage message, IntPtr userData, IntPtr messageParameter1, IntPtr messageParameter2)
        {
            switch (message)
            {
            case MidiInterop.MidiInMessage.Open:
            case MidiInterop.MidiInMessage.Close:
            case MidiInterop.MidiInMessage.LongData:
            case MidiInterop.MidiInMessage.LongError:
            case (MidiInterop.MidiInMessage) 967:
            case (MidiInterop.MidiInMessage) 968:
            case (MidiInterop.MidiInMessage) 969:
            case (MidiInterop.MidiInMessage) 970:
            case (MidiInterop.MidiInMessage) 971:
            case MidiInterop.MidiInMessage.MoreData:
                break;

            case MidiInterop.MidiInMessage.Data:
                if (this.MessageReceived != null)
                {
                    this.MessageReceived(this, new MidiInMessageEventArgs(messageParameter1.ToInt32(), messageParameter2.ToInt32()));
                    return;
                }
                break;

            case MidiInterop.MidiInMessage.Error:
                if (this.ErrorReceived != null)
                {
                    this.ErrorReceived(this, new MidiInMessageEventArgs(messageParameter1.ToInt32(), messageParameter2.ToInt32()));
                }
                break;

            default:
                return;
            }
        }
示例#2
0
        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
                if (SysexMessageReceived != null)
                {
                    MidiInterop.MIDIHDR hdr = (MidiInterop.MIDIHDR)Marshal.PtrToStructure(messageParameter1, typeof(MidiInterop.MIDIHDR));

                    //  Copy the bytes received into an array so that the buffer is immediately available for re-use
                    var sysexBytes = new byte[hdr.dwBytesRecorded];
                    Marshal.Copy(hdr.lpData, sysexBytes, 0, hdr.dwBytesRecorded);

                    SysexMessageReceived(this, new MidiInSysexMessageEventArgs(sysexBytes, messageParameter2.ToInt32()));
                    //  Re-use the buffer - but not if we have no event handler registered as we are closing
                    MidiInterop.midiInAddBuffer(hMidiIn, messageParameter1, Marshal.SizeOf(typeof(MidiInterop.MIDIHDR)));
                }
                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.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;
            }
        }