private void ThreadProc() { while (!m_Finished) { Advance(); if (m_FillProc != null && !m_Finished) { m_FillProc(ref m_CurrentBuffer); } else { // zero out buffer byte v = m_zero; byte[] b = new byte[m_CurrentBuffer.Size]; //for (int i = 0; i < b.Length; i++) // b[i] = v; System.Array.Clear(b, 0, m_CurrentBuffer.Size); Marshal.Copy(b, 0, m_CurrentBuffer.Data, b.Length); } if (!m_CurrentBuffer.Finished) { m_CurrentBuffer.Play(); } else { m_CurrentBuffer.OnCompleted(); } m_Finished = AllFinished(); } WaitForAllBuffers(); }
internal static void WaveOutProc(IntPtr hdrvr, int uMsg, int dwUser, ref WaveNative.WaveHdr wavhdr, int dwParam2) { if (uMsg == WaveNative.MM_WOM_DONE) { try { GCHandle h = (GCHandle)wavhdr.dwUser; WaveOutBuffer buf = (WaveOutBuffer)h.Target; buf.OnCompleted(); } catch { } } }