Example #1
0
    private void HandleInvalidSysExMessage(object state)
    {
        lock (lockObject)
        {
            IntPtr headerPtr = (IntPtr)state;

            MidiHeader header = (MidiHeader)Marshal.PtrToStructure(headerPtr, typeof(MidiHeader));

            if (!resetting)
            {
                byte[] data = new byte[header.bytesRecorded];

                Marshal.Copy(header.data, data, 0, data.Length);

                OnInvalidSysExMessageReceived(new InvalidSysExMessageEventArgs(data));

                int result = AddSysExBuffer();

                if (result != MIDIExceptions.MMSYSERR_NOERROR)
                {
                    Exception ex = new InputDeviceException(result);

                    OnError(new ErrorEventArgs(ex));
                }
            }

            ReleaseBuffer(headerPtr);
        }
    }
Example #2
0
    /// <summary>
    /// Releases the resources associated with the specified MidiHeader pointer.
    /// </summary>
    /// <param name="headerPtr">
    /// The MidiHeader pointer.
    /// </param>
    public void Destroy(IntPtr headerPtr)
    {
        MidiHeader header = (MidiHeader)Marshal.PtrToStructure(headerPtr, typeof(MidiHeader));

        Marshal.FreeHGlobal(header.data);
        Marshal.FreeHGlobal(headerPtr);
    }
Example #3
0
        /*private static HiPerfTimer t1 = new HiPerfTimer();
         * private static double timer1_sum = 0.0;
         * private static int timer1_count = 0;*/
        public static int SendLongMessage(int handle, byte[] data)
        {
            /*Debug.Write("Midi Out: ");
             * for(int i=0; i<data.Length; i++)
             *      Debug.Write(data[i].ToString("X")+" ");
             * Debug.WriteLine("");*/

            int        result;
            IntPtr     ptr;
            int        size   = Marshal.SizeOf(typeof(MidiHeader));
            MidiHeader header = new MidiHeader();

            header.data = Marshal.AllocHGlobal(data.Length);
            for (int i = 0; i < data.Length; i++)
            {
                Marshal.WriteByte(header.data, i, data[i]);
            }
            header.bufferLength  = data.Length;
            header.bytesRecorded = data.Length;
            header.flags         = 0;

            try
            {
                ptr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(MidiHeader)));
            }
            catch (Exception)
            {
                Marshal.FreeHGlobal(header.data);
                throw;
            }

            try
            {
                Marshal.StructureToPtr(header, ptr, false);
            }
            catch (Exception)
            {
                Marshal.FreeHGlobal(header.data);
                Marshal.FreeHGlobal(ptr);
                throw;
            }

            result = MidiOutPrepareHeader(handle, ptr, size);
            if (result == 0)
            {
                result = MidiOutLongMessage(handle, ptr, size);
            }
            if (result == 0)
            {
                result = MidiOutUnprepareHeader(handle, ptr, size);
            }

            Marshal.FreeHGlobal(header.data);
            Marshal.FreeHGlobal(ptr);

            return(result);
        }
Example #4
0
        public static int AddSysExBuffer(int handle)
        {
            int        result;
            IntPtr     headerPtr;
            int        size   = Marshal.SizeOf(typeof(MidiHeader));
            MidiHeader header = new MidiHeader();

            header.bufferLength  = 64;
            header.bytesRecorded = 0;
            header.data          = Marshal.AllocHGlobal(64);
            header.flags         = 0;

            try
            {
                headerPtr = Marshal.AllocHGlobal(size);
            }
            catch (Exception)
            {
                Marshal.FreeHGlobal(header.data);
                throw;
            }

            try
            {
                Marshal.StructureToPtr(header, headerPtr, false);
            }
            catch (Exception)
            {
                Marshal.FreeHGlobal(header.data);
                Marshal.FreeHGlobal(headerPtr);

                throw;
            }

            result = Midi.MidiInPrepareHeader(handle, headerPtr, size);
            if (result != 0)
            {
                return(result);
            }

            result = Midi.MidiInAddBuffer(handle, headerPtr, size);
            if (result != 0)
            {
                return(result);
            }

            return(result);
        }
Example #5
0
        public static void ReleaseBuffer(int handle, IntPtr headerPtr)
        {
            int result = MidiInUnprepareHeader(handle, headerPtr, Marshal.SizeOf(typeof(MidiHeader)));

            if (result != 0)
            {
                StringBuilder error_text = new StringBuilder(64);
                Midi.MidiInGetErrorText(result, error_text, 64);
                Debug.WriteLine("MidiInUnprepareHeader Error: " + error_text);
                return;
            }

            MidiHeader header = (MidiHeader)Marshal.PtrToStructure(headerPtr, typeof(MidiHeader));

            Marshal.FreeHGlobal(header.data);
            Marshal.FreeHGlobal(headerPtr);
        }
Example #6
0
        public static int AddSysExBuffer(int handle)
        {
            int result;
            IntPtr headerPtr;
            int size = Marshal.SizeOf(typeof(MidiHeader));
            MidiHeader header = new MidiHeader();
            header.bufferLength = 64;
            header.bytesRecorded = 0;
            header.data = Marshal.AllocHGlobal(64);
            header.flags = 0;

            try
            {
                headerPtr = Marshal.AllocHGlobal(size);
            }
            catch(Exception)
            {
                Marshal.FreeHGlobal(header.data);
                throw;
            }

            try
            {
                Marshal.StructureToPtr(header, headerPtr, false);
            }
            catch(Exception)
            {
                Marshal.FreeHGlobal(header.data);
                Marshal.FreeHGlobal(headerPtr);

                throw;
            }

            result = Midi.MidiInPrepareHeader(handle, headerPtr, size);
            if(result != 0) return result;

            result = Midi.MidiInAddBuffer(handle, headerPtr, size);
            if(result != 0) return result;

            return result;
        }
Example #7
0
    /// <summary>
    /// Builds the pointer to the MidiHeader structure.
    /// </summary>
    public void Build()
    {
        MidiHeader header = new MidiHeader();

        // Initialize the MidiHeader.
        header.bufferLength  = BufferLength;
        header.bytesRecorded = 0;
        header.data          = Marshal.AllocHGlobal(BufferLength);
        header.flags         = 0;

        // Write data to the MidiHeader.
        for (int i = 0; i < BufferLength; i++)
        {
            Marshal.WriteByte(header.data, i, data[i]);
        }

        try
        {
            result = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(MidiHeader)));
        }
        catch (Exception)
        {
            Marshal.FreeHGlobal(header.data);

            throw;
        }

        try
        {
            Marshal.StructureToPtr(header, result, false);
        }
        catch (Exception)
        {
            Marshal.FreeHGlobal(header.data);
            Marshal.FreeHGlobal(result);

            throw;
        }

        built = true;
    }
Example #8
0
    private void HandleSysExMessage(object state)
    {
        lock (lockObject)
        {
            IntPtr headerPtr = (IntPtr)state;

            MidiHeader header = (MidiHeader)Marshal.PtrToStructure(headerPtr, typeof(MidiHeader));

            if (!resetting)
            {
                for (int i = 0; i < header.bytesRecorded; i++)
                {
                    sysExData.Add(Marshal.ReadByte(header.data, i));
                }

                if (sysExData[0] == 0xF0 && sysExData[sysExData.Count - 1] == 0xF7)
                {
                    SysExMessage message = new SysExMessage(sysExData.ToArray());

                    sysExData.Clear();

                    OnSysExMessageReceived(new SysExMessageEventArgs(message));
                }

                int result = AddSysExBuffer();

                if (result != MIDIExceptions.MMSYSERR_NOERROR)
                {
                    Exception ex = new InputDeviceException(result);

                    OnError(new ErrorEventArgs(ex));
                }
            }

            ReleaseBuffer(headerPtr);
        }
    }
Example #9
0
 public static extern int midiInAddBuffer(IntPtr hmi, ref MidiHeader lpMidiInHdr, int cbMidiInHdr);
Example #10
0
 public static extern int midiInUnprepareHeader(IntPtr hmi, ref MidiHeader lpMidiInHdr, int cbMidiInHdr);
Example #11
0
 public static extern int midiOutUnprepareHeader(int hMidiOut, ref MidiHeader lpMidiOutHdr, int uSize);
Example #12
0
 public static extern int midiOutLongMsg(int hMidiOut, ref MidiHeader lpMidiOutHdr, int uSize);
Example #13
0
 public static extern int midiInUnprepareHeader(IntPtr hmi, ref MidiHeader lpMidiInHdr, int cbMidiInHdr);
Example #14
0
    private void loadStream(Stream stream, bool reloading = false)
    {
        byte[] array = new byte[4];
        stream.Read(array, 0, 4);
        if (Encoding.UTF8.GetString(array, 0, array.Length) != "MThd")
        {
            return;
        }
        midiHeader = new MidiHeader();
        stream.Read(array, 0, 4);
        Array.Reverse(array);
        BitConverter.ToInt32(array, 0);
        array = new byte[2];
        stream.Read(array, 0, 2);
        Array.Reverse(array);
        midiHeader.setMidiFormat(BitConverter.ToInt16(array, 0));
        stream.Read(array, 0, 2);
        Array.Reverse(array);
        int num = BitConverter.ToInt16(array, 0);

        stream.Read(array, 0, 2);
        Array.Reverse(array);
        int num2 = BitConverter.ToInt16(array, 0);

        midiHeader.DeltaTiming = (num2 & 0x7FFF);
        midiHeader.TimeFormat  = (((num2 & 0x8000) > 0) ? MidiHelper.MidiTimeFormat.FamesPerSecond : MidiHelper.MidiTimeFormat.TicksPerBeat);
        bool flag = (!reloading || tracks.Count != num) ? true : false;

        if (flag)
        {
            tracks.Clear();
            seqEvt.Events.Clear();
        }
        int num3 = 0;

        while (true)
        {
            if (num3 >= num)
            {
                return;
            }
            MidiTrack          midiTrack          = null;
            MidiSequencerEvent midiSequencerEvent = null;
            if (flag)
            {
                midiTrack = new MidiTrack();
                tracks.Add(midiTrack);
                midiSequencerEvent = new MidiSequencerEvent();
                seqEvt.Events.Add(midiSequencerEvent);
            }
            else
            {
                midiTrack           = tracks[num3];
                midiTrack.TotalTime = 0uL;
                midiSequencerEvent  = seqEvt.Events[num3];
            }
            List <byte>      list  = new List <byte>();
            List <byte>      list2 = new List <byte>();
            List <MidiEvent> list3 = new List <MidiEvent>();
            list.Add(0);
            list2.Add(0);
            array = new byte[4];
            stream.Read(array, 0, 4);
            if (Encoding.UTF8.GetString(array, 0, array.Length) != "MTrk")
            {
                break;
            }
            stream.Read(array, 0, 4);
            Array.Reverse(array);
            int num4 = BitConverter.ToInt32(array, 0);
            array = new byte[num4];
            stream.Read(array, 0, num4);
            int       i    = 0;
            byte      b    = 0;
            int       num5 = 0;
            MidiEvent midiEvent;
            for (; i < array.Length; list3.Add(midiEvent), tracks[num3].TotalTime = tracks[num3].TotalTime + midiEvent.deltaTime)
            {
                ushort numOfBytes = 0;
                uint   data       = BitConverter.ToUInt32(array, i);
                midiEvent           = new MidiEvent();
                midiEvent.deltaTime = GetTime(data, ref numOfBytes);
                i += 4 - (4 - numOfBytes);
                byte b2   = array[i];
                int  num6 = GetChannel(b2);
                if (b2 < 128)
                {
                    b2   = b;
                    num6 = num5;
                    i--;
                }
                if (b2 != byte.MaxValue)
                {
                    b2 = (byte)(b2 & 0xF0);
                }
                b    = b2;
                num5 = num6;
                switch (b2)
                {
                case 128:
                    midiEvent.midiChannelEvent = MidiHelper.MidiChannelEvent.Note_Off;
                    i++;
                    midiEvent.channel       = (byte)num6;
                    midiEvent.Parameters[0] = midiEvent.channel;
                    midiEvent.parameter1    = array[i++];
                    midiEvent.parameter2    = array[i++];
                    midiEvent.Parameters[1] = midiEvent.parameter1;
                    midiEvent.Parameters[2] = midiEvent.parameter2;
                    continue;

                case 144:
                    midiEvent.midiChannelEvent = MidiHelper.MidiChannelEvent.Note_On;
                    i++;
                    midiEvent.channel       = (byte)num6;
                    midiEvent.Parameters[0] = midiEvent.channel;
                    midiEvent.parameter1    = array[i++];
                    midiEvent.parameter2    = array[i++];
                    midiEvent.Parameters[1] = midiEvent.parameter1;
                    midiEvent.Parameters[2] = midiEvent.parameter2;
                    if (midiEvent.parameter2 == 0)
                    {
                        midiEvent.midiChannelEvent = MidiHelper.MidiChannelEvent.Note_Off;
                    }
                    tracks[num3].NotesPlayed++;
                    continue;

                case 160:
                    midiEvent.midiChannelEvent = MidiHelper.MidiChannelEvent.Note_Aftertouch;
                    midiEvent.channel          = (byte)num6;
                    midiEvent.Parameters[0]    = midiEvent.channel;
                    i++;
                    midiEvent.parameter1 = array[++i];
                    midiEvent.parameter2 = array[++i];
                    continue;

                case 176:
                    midiEvent.midiChannelEvent = MidiHelper.MidiChannelEvent.Controller;
                    midiEvent.channel          = (byte)num6;
                    midiEvent.Parameters[0]    = midiEvent.channel;
                    i++;
                    midiEvent.parameter1    = array[i++];
                    midiEvent.parameter2    = array[i++];
                    midiEvent.Parameters[1] = midiEvent.parameter1;
                    midiEvent.Parameters[2] = midiEvent.parameter2;
                    continue;

                case 192:
                    midiEvent.midiChannelEvent = MidiHelper.MidiChannelEvent.Program_Change;
                    midiEvent.channel          = (byte)num6;
                    midiEvent.Parameters[0]    = midiEvent.channel;
                    i++;
                    midiEvent.parameter1    = array[i++];
                    midiEvent.Parameters[1] = midiEvent.parameter1;
                    if (midiEvent.channel != 9)
                    {
                        if (!list.Contains(midiEvent.parameter1))
                        {
                            list.Add(midiEvent.parameter1);
                        }
                    }
                    else if (!list2.Contains(midiEvent.parameter1))
                    {
                        list2.Add(midiEvent.parameter1);
                    }
                    continue;

                case 208:
                    midiEvent.midiChannelEvent = MidiHelper.MidiChannelEvent.Channel_Aftertouch;
                    midiEvent.channel          = (byte)num6;
                    midiEvent.Parameters[0]    = midiEvent.channel;
                    i++;
                    midiEvent.parameter1 = array[++i];
                    continue;

                case 224:
                {
                    midiEvent.midiChannelEvent = MidiHelper.MidiChannelEvent.Pitch_Bend;
                    midiEvent.channel          = (byte)num6;
                    midiEvent.Parameters[0]    = midiEvent.channel;
                    i++;
                    midiEvent.parameter1 = array[++i];
                    midiEvent.parameter2 = array[++i];
                    ushort parameter = midiEvent.parameter1;
                    parameter = (ushort)(parameter << 7);
                    parameter = (ushort)(parameter | midiEvent.parameter2);
                    midiEvent.Parameters[1] = ((double)(int)parameter - 8192.0) / 8192.0;
                    continue;
                }

                case byte.MaxValue:
                    switch (array[++i])
                    {
                    case 0:
                        midiEvent.midiMetaEvent = MidiHelper.MidiMetaEvent.Sequence_Number;
                        i++;
                        break;

                    case 1:
                        midiEvent.midiMetaEvent = MidiHelper.MidiMetaEvent.Text_Event;
                        i++;
                        midiEvent.parameter1    = array[i++];
                        midiEvent.Parameters[0] = midiEvent.parameter1;
                        midiEvent.Parameters[1] = Encoding.UTF8.GetString(array, i, array[i - 1]);
                        i += array[i - 1];
                        break;

                    case 2:
                        midiEvent.midiMetaEvent = MidiHelper.MidiMetaEvent.Copyright_Notice;
                        i++;
                        midiEvent.parameter1    = array[i++];
                        midiEvent.Parameters[0] = midiEvent.parameter1;
                        midiEvent.Parameters[1] = Encoding.UTF8.GetString(array, i, array[i - 1]);
                        i += array[i - 1];
                        break;

                    case 3:
                        midiEvent.midiMetaEvent = MidiHelper.MidiMetaEvent.Sequence_Or_Track_Name;
                        i++;
                        midiEvent.parameter1    = array[i++];
                        midiEvent.Parameters[0] = midiEvent.parameter1;
                        midiEvent.Parameters[1] = Encoding.UTF8.GetString(array, i, array[i - 1]);
                        i += array[i - 1];
                        break;

                    case 4:
                        midiEvent.midiMetaEvent = MidiHelper.MidiMetaEvent.Instrument_Name;
                        i++;
                        midiEvent.Parameters[0] = Encoding.UTF8.GetString(array, i + 1, array[i]);
                        i += array[i] + 1;
                        break;

                    case 5:
                        midiEvent.midiMetaEvent = MidiHelper.MidiMetaEvent.Lyric_Text;
                        i++;
                        midiEvent.Parameters[0] = Encoding.UTF8.GetString(array, i + 1, array[i]);
                        i += array[i] + 1;
                        break;

                    case 6:
                        midiEvent.midiMetaEvent = MidiHelper.MidiMetaEvent.Marker_Text;
                        i++;
                        midiEvent.Parameters[0] = Encoding.UTF8.GetString(array, i + 1, array[i]);
                        i += array[i] + 1;
                        break;

                    case 7:
                        midiEvent.midiMetaEvent = MidiHelper.MidiMetaEvent.Cue_Point;
                        i++;
                        midiEvent.Parameters[0] = Encoding.UTF8.GetString(array, i + 1, array[i]);
                        i += array[i] + 1;
                        break;

                    case 32:
                        midiEvent.midiMetaEvent = MidiHelper.MidiMetaEvent.Midi_Channel_Prefix_Assignment;
                        i++;
                        midiEvent.parameter1    = array[i++];
                        midiEvent.Parameters[0] = midiEvent.parameter1;
                        midiEvent.Parameters[1] = array[i++];
                        break;

                    case 47:
                        midiEvent.midiMetaEvent = MidiHelper.MidiMetaEvent.End_of_Track;
                        i += 2;
                        break;

                    case 81:
                    {
                        midiEvent.midiMetaEvent = MidiHelper.MidiMetaEvent.Tempo;
                        i++;
                        midiEvent.Parameters[4] = array[i++];
                        byte[] array3 = new byte[4];
                        for (int num29 = 0; num29 < 3; num29++)
                        {
                            array3[num29 + 1] = array[num29 + i];
                        }
                        i += 3;
                        byte[] array4 = new byte[4];
                        for (int num30 = 0; num30 < 4; num30++)
                        {
                            array4[3 - num30] = array3[num30];
                        }
                        uint num31 = BitConverter.ToUInt32(array4, 0);
                        midiEvent.Parameters[0] = num31;
                        break;
                    }

                    case 84:
                    {
                        midiEvent.midiMetaEvent = MidiHelper.MidiMetaEvent.Smpte_Offset;
                        i++;
                        int num16 = array[i++];
                        if (num16 >= 4)
                        {
                            for (int n = 0; n < 4; n++)
                            {
                                midiEvent.Parameters[n] = array[i++];
                            }
                        }
                        else
                        {
                            for (int num18 = 0; num18 < num16; num18++)
                            {
                                midiEvent.Parameters[num18] = array[i++];
                            }
                        }
                        for (int num20 = 4; num20 < num16; num20++)
                        {
                            i++;
                        }
                        break;
                    }

                    case 88:
                    {
                        midiEvent.midiMetaEvent = MidiHelper.MidiMetaEvent.Time_Signature;
                        i++;
                        int num22 = array[i++];
                        if (num22 >= 4)
                        {
                            for (int num23 = 0; num23 < 4; num23++)
                            {
                                midiEvent.Parameters[num23] = array[i++];
                            }
                        }
                        else
                        {
                            for (int num25 = 0; num25 < num22; num25++)
                            {
                                midiEvent.Parameters[num25] = array[i++];
                            }
                        }
                        for (int num27 = 4; num27 < num22; num27++)
                        {
                            i++;
                        }
                        break;
                    }

                    case 89:
                    {
                        midiEvent.midiMetaEvent = MidiHelper.MidiMetaEvent.Key_Signature;
                        i++;
                        int num10 = array[i++];
                        if (num10 >= 4)
                        {
                            for (int k = 0; k < 4; k++)
                            {
                                midiEvent.Parameters[k] = array[i++];
                            }
                        }
                        else
                        {
                            for (int l = 0; l < num10; l++)
                            {
                                midiEvent.Parameters[l] = array[i++];
                            }
                        }
                        for (int m = 4; m < num10; m++)
                        {
                            i++;
                        }
                        break;
                    }

                    case 127:
                    {
                        midiEvent.midiMetaEvent = MidiHelper.MidiMetaEvent.Sequencer_Specific_Event;
                        i++;
                        midiEvent.Parameters[4] = array[i++];
                        byte[] array2 = new byte[(byte)midiEvent.Parameters[4]];
                        for (int j = 0; j < array2.Length; j++)
                        {
                            array2[j] = array[i++];
                        }
                        midiEvent.Parameters[0] = array2;
                        break;
                    }
                    }
                    continue;

                case 240:
                    break;

                default:
                    continue;
                }
                for (; array[i] != 247; i++)
                {
                }
                i++;
            }
            tracks[num3].Programs     = list.ToArray();
            tracks[num3].DrumPrograms = list2.ToArray();
            tracks[num3].MidiEvents   = list3.ToArray();
            num3++;
        }
        throw new Exception("Invalid track!");
    }
Example #15
0
 public static extern int midiInAddBuffer(IntPtr hmi, ref MidiHeader lpMidiInHdr, int cbMidiInHdr);
Example #16
0
 public static extern int midiOutUnprepareHeader(IntPtr hmo, ref MidiHeader lpMidiOutHdr, int cbMidiOutHdr);
Example #17
0
        /*private static HiPerfTimer t1 = new HiPerfTimer();
        private static double timer1_sum = 0.0;
        private static int timer1_count = 0;*/
        public static int SendLongMessage(int handle, byte[] data)
        {
            /*Debug.Write("Midi Out: ");
            for(int i=0; i<data.Length; i++)
                Debug.Write(data[i].ToString("X")+" ");
            Debug.WriteLine("");*/

            int result;
            IntPtr ptr;
            int size = Marshal.SizeOf(typeof(MidiHeader));
            MidiHeader header = new MidiHeader();
            header.data = Marshal.AllocHGlobal(data.Length);
            for(int i=0; i<data.Length; i++)
                Marshal.WriteByte(header.data, i, data[i]);
            header.bufferLength = data.Length;
            header.bytesRecorded = data.Length;
            header.flags = 0;

            try
            {
                ptr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(MidiHeader)));
            }
            catch(Exception)
            {
                Marshal.FreeHGlobal(header.data);
                throw;
            }

            try
            {
                Marshal.StructureToPtr(header, ptr, false);
            }
            catch(Exception)
            {
                Marshal.FreeHGlobal(header.data);
                Marshal.FreeHGlobal(ptr);
                throw;
            }

            result = MidiOutPrepareHeader(handle, ptr, size);
            if(result == 0) result = MidiOutLongMessage(handle, ptr, size);
            if(result == 0) result = MidiOutUnprepareHeader(handle, ptr, size);

            Marshal.FreeHGlobal(header.data);
            Marshal.FreeHGlobal(ptr);

            return result;
        }
Example #18
0
 public static extern int midiOutLongMsg(IntPtr hmo, ref MidiHeader lpMidiOutHdr, int cbMidiOutHdr);
Example #19
0
        private int InCallback(int hMidiIn, int wMsg, int dwInstance, int dwParam1, int dwParam2)
        {
            lock (in_lock_obj)
            {
                switch (wMsg)
                {
                case MIM_OPEN:
                    Debug.WriteLine("wMsg=MIM_OPEN");
                    break;

                case MIM_CLOSE:
                    Debug.WriteLine("wMsg=MIM_CLOSE");
                    break;

                case MIM_DATA:
                    Command cmd   = (Command)((byte)dwParam1);
                    byte    byte1 = (byte)(dwParam1 >> 8);
                    byte    byte2 = (byte)(dwParam1 >> 16);

                    inDevice_ChannelMessageReceived(byte1, byte2);
                    // Debug.WriteLine("wMsg=MIM_DATA, dwInstance=%08x, dwParam1=%08x, dwParam2=%08x", dwInstance, dwParam1, dwParam2);

                    /*	switch(cmd)
                     *  {
                     *      case Command.NoteOn:
                     *          switch((Note)byte1)
                     *          {
                     *              case Note.Dot:
                     *                  //console.Keyer.FWCDot = true;
                     *                  //FWC.SetMOX(true);
                     *                  break;
                     *              case Note.Dash:
                     *                  //console.Keyer.FWCDash = true;
                     *                  //FWC.SetMOX(true);
                     *                  break;
                     *              case Note.MicDown:
                     *                  console.MicDown = true;
                     *                  break;
                     *              case Note.MicUp:
                     *                  console.MicUp = true;
                     *                  break;
                     *              case Note.MicFast:
                     *                  console.MicFast = !console.MicFast;
                     *                  break;
                     *          }
                     *          break;
                     *      case Command.NoteOff:
                     *          switch((Note)byte1)
                     *          {
                     *              case Note.Dot:
                     *                  //console.Keyer.FWCDot = false;
                     *                  //FWC.SetMOX(false);
                     *                  break;
                     *              case Note.Dash:
                     *                  //console.Keyer.FWCDash = false;
                     *                  //FWC.SetMOX(false);
                     *                  break;
                     *              case Note.MicDown:
                     *                  console.MicDown = false;
                     *                  break;
                     *              case Note.MicUp:
                     *                  console.MicUp = false;
                     *                  break;
                     *              case Note.MicFast:
                     *                  break;
                     *          }
                     *          break;
                     *      case Command.Controller:
                     *          switch((Controller)byte1)
                     *          {
                     *              case Controller.HoldPedal1:
                     *                  console.FWCMicPTT = (byte2 > 63);
                     *                  break;
                     *              case Controller.HoldPedal2:
                     *                  console.FWCRCAPTT = (byte2 > 63);
                     *                  break;
                     *          }
                     *          break;
                     *      case Command.Aftertouch0:
                     *      case Command.Aftertouch1:
                     *          int id = (ushort)((((byte)cmd-(byte)Command.Aftertouch0)<<2)+(byte1>>5));
                     *          int data = (int)(((byte1&0x1F)<<7)+byte2);
                     *          if(midi_in_table.ContainsKey(id))
                     *              midi_in_table.Remove(id);
                     *          midi_in_table.Add(id, data);
                     *          break;
                     *  }		*/
                    break;

                case MIM_LONGDATA:
                    if (!resetting && midi_in_handle != 0)     // in case device closes, don't send anymore buffers
                    {
                        int result = AddSysExBuffer(midi_in_handle);
                        if (result != 0)
                        {
                            StringBuilder error_text = new StringBuilder(64);
                            MidiInGetErrorText(result, error_text, 64);
                            Debug.WriteLine("AddSysExBuffer Error: " + error_text);
                        }
                    }

                    IntPtr     headerPtr = new IntPtr(dwParam1);
                    MidiHeader header    = (MidiHeader)Marshal.PtrToStructure(headerPtr, typeof(MidiHeader));
                    byte[]     temp      = new byte[header.bytesRecorded];
                    for (int i = 0; i < header.bytesRecorded; i++)
                    {
                        temp[i] = Marshal.ReadByte(header.data, i);
                    }

                    if (temp.Length > 5)
                    {
                        byte[] temp2 = new byte[temp.Length - 5];
                        for (int i = 0; i < temp.Length - 5; i++)
                        {
                            temp2[i] = temp[i + 4];
                        }

                        byte[] buf = new byte[temp2.Length / 2];
                        DecodeBytes(buf, temp2);
                        if (midi_in_table.ContainsKey(BitConverter.ToUInt16(buf, 0)))
                        {
                            midi_in_table.Remove(BitConverter.ToUInt16(buf, 0));
                        }
                        midi_in_table.Add(BitConverter.ToUInt16(buf, 0), buf);
                    }

                    /*for(int i=0; i<header.bytesRecorded; i++)
                     *  Debug.Write(buf[i].ToString("X")+" ");
                     * Debug.WriteLine("");*/

                    if (midi_in_handle != 0)
                    {
                        ReleaseBuffer(midi_in_handle, headerPtr);
                    }
                    Debug.WriteLine("wMsg=MIM_LONGDATA");
                    break;

                case MIM_ERROR:
                    Debug.WriteLine("wMsg=MIM_ERROR");
                    break;

                case MIM_LONGERROR:
                    Debug.WriteLine("wMsg=MIM_LONGERROR");
                    break;

                case MIM_MOREDATA:
                    Debug.WriteLine("wMsg=MIM_MOREDATA");
                    break;
                }
            }

            return(0);
        }
Example #20
0
 public static extern int midiOutUnprepareHeader(IntPtr hmo, ref MidiHeader lpMidiOutHdr, int cbMidiOutHdr);
Example #21
0
 public static extern int midiOutLongMsg(IntPtr hmo, ref MidiHeader lpMidiOutHdr, int cbMidiOutHdr);