예제 #1
0
        private static unsafe uint writeImpl(Node node, uint offset, uint size, byte[] buffer)
        {
            AudioDataCookie cookie = (AudioDataCookie)node.Cookie;

            if (cookie == null)
                return(0);

            fixed(byte *ptr = buffer)
            {
                uint off = 0;

                while (size > 0)
                {
                    uint written = cookie.Buffer.Write(ptr + off, size);
                    if (written == 0)
                    {
                        MultiTasking.Tasking.Yield();
                    }

                    size -= written;
                    off  += written;
                }
            }

            return(size);
        }
예제 #2
0
        private static void openImpl(Node node)
        {
            AudioDataCookie cookie = new AudioDataCookie(BufferSize * sizeof(ushort));

            m_buffers.Add(cookie.Buffer);
            node.Cookie = cookie;
        }
예제 #3
0
        private static void closeImpl(Node node)
        {
            AudioDataCookie cookie = (AudioDataCookie)node.Cookie;

            int index = m_buffers.IndexOf(cookie.Buffer);

            if (index > -1)
            {
                m_buffers.RemoveAt(index);
            }

            cookie.Dispose();
            Heap.Free(cookie);
            node.Cookie = null;
        }