/// <summary> /// Fills recording buffers. /// </summary> private void CreateBuffers() { while (m_pBuffers.Count < 10) { BufferItem bufferItem = new BufferItem(m_pWavDevHandle, m_BufferSize); m_pBuffers.Add(bufferItem.HeaderHandle.AddrOfPinnedObject().ToInt64(), bufferItem); bufferItem.Queue(false); } }
/// <summary> /// This method is called when wav device generates some event. /// </summary> /// <param name="hdrvr">Handle to the waveform-audio device associated with the callback.</param> /// <param name="uMsg">Waveform-audio input message.</param> /// <param name="dwUser">User-instance data specified with waveOutOpen.</param> /// <param name="dwParam1">Message parameter.</param> /// <param name="dwParam2">Message parameter.</param> private void OnWaveInProc(IntPtr hdrvr, int uMsg, IntPtr dwUser, IntPtr dwParam1, IntPtr dwParam2) { // NOTE: MSDN warns, we may not call any wave related methods here. // This may cause deadlock. But MSDN examples do it, probably we can do it too. if (m_IsDisposed) { return; } try{ lock (m_pFixWaveInDeadlock) { if (uMsg == WavConstants.MM_WIM_DATA) { // Free buffer and queue it for reuse. //ThreadPool.QueueUserWorkItem(new WaitCallback(delegate(object state){ try { if (m_IsDisposed) { return; } BufferItem bufferItem = m_pBuffers[dwParam1.ToInt64()]; OnAudioFrameReceived(bufferItem.EventArgs); bufferItem.Queue(true); } catch (Exception x) { Console.WriteLine(x.ToString()); } //})); } } } catch { // We don't care about errors here. } }
/// <summary> /// Fills recording buffers. /// </summary> private void CreateBuffers() { while(m_pBuffers.Count < 10){ BufferItem bufferItem = new BufferItem(m_pWavDevHandle,m_BufferSize); m_pBuffers.Add(bufferItem.HeaderHandle.AddrOfPinnedObject().ToInt64(),bufferItem); bufferItem.Queue(false); } }