Exemplo n.º 1
0
        public void Send(MidiEndpoint endpoint, MidiPacket [] arr)
        {
            var list = Marshal.AllocHGlobal(Marshal.SizeOf <MidiPacketListNative> ());

            try {
                var p = CoreMidiInterop.MIDIPacketListInit(list);
                foreach (var item in arr)
                {
                    p = CoreMidiInterop.MIDIPacketListAdd(list, arr.Length, p, item.TimeStamp, item.Length, item.Bytes);
                }
                CoreMidiInterop.MIDISend(Handle, endpoint.Handle, list);
            } finally {
                Marshal.FreeHGlobal(list);
            }
        }
Exemplo n.º 2
0
        public void CallMessageReceived(MIDIPacketListPtr pktlist, IntPtr readProcRefCon, IntPtr srcConnRefCon)
        {
            if (MessageReceived == null)
            {
                return;
            }
            var packets = new List <MidiPacket> ();

            for (var p = CoreMidiInterop.MIDIPacketListInit(pktlist);
                 p != IntPtr.Zero;
                 p = CoreMidiInterop.MIDIPacketNext(p))
            {
                var packet = Marshal.PtrToStructure <MIDIPacketNative> (p);
                packets.Add(new MidiPacket(packet.TimeStamp, packet.Length, packet.Data));
            }
            MessageReceived(this, new MidiPacketsEventArgs {
                Packets = packets.ToArray()
            });
        }
Exemplo n.º 3
0
        public void Send(MidiEndpoint endpoint, MidiPacket [] arr)
        {
            var msize = Marshal.SizeOf <MIDIPacketNative> ();
            var size  = arr.Select(a => msize + a.Length).Sum();

            if (list == IntPtr.Zero || size > buf_size)
            {
                if (list != IntPtr.Zero)
                {
                    Marshal.FreeHGlobal(list);
                }
                list = Marshal.AllocHGlobal(buf_size);
            }

            var p = CoreMidiInterop.MIDIPacketListInit(list);

            foreach (var item in arr)
            {
                p = CoreMidiInterop.MIDIPacketListAdd(list, 1024, p, item.TimeStamp, item.Length, item.Bytes);
            }
            CoreMidiInterop.MIDISend(Handle, endpoint.Handle, list);
        }