Пример #1
0
 /// <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);
     }
 }
Пример #2
0
        /// <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.
            }
        }
Пример #3
0
 /// <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);
     } 
 }