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); }
private static void openImpl(Node node) { AudioDataCookie cookie = new AudioDataCookie(BufferSize * sizeof(ushort)); m_buffers.Add(cookie.Buffer); node.Cookie = cookie; }
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; }