コード例 #1
0
ファイル: WaveIn.cs プロジェクト: Jackjet/conference
 public WaveInRecorder(int device, WaveFormat format, int bufferSize, int bufferCount, BufferDoneEventHandler doneProc, Action <bool> callBack)
 {
     try
     {
         m_DoneProc = doneProc;
         int error = WaveNative.waveInOpen(out m_WaveIn, device, format, m_BufferProc, 0, WaveNative.CALLBACK_FUNCTION);
         WaveInHelper.Try(error);
         AllocateBuffers(bufferSize, bufferCount);
         for (int i = 0; i < bufferCount; i++)
         {
             SelectNextBuffer();
             m_CurrentBuffer.Record();
         }
         error = WaveNative.waveInStart(m_WaveIn);
         WaveInHelper.Try(error);
         m_Thread = new Thread(new ThreadStart(ThreadProc));
         m_Thread.Start();
         if (callBack != null)
         {
             callBack(true);
         }
     }
     catch (Exception)
     {
         if (callBack != null)
         {
             callBack(false);
         }
     }
 }
コード例 #2
0
 public void Dispose()
 {
     if (m_Thread != null)
     {
         try
         {
             m_Finished = true;
             if (m_WaveIn != IntPtr.Zero)
             {
                 WaveNative.waveInReset(m_WaveIn);
             }
             WaitForAllBuffers();
             m_Thread.Join();
             m_DoneProc = null;
             FreeBuffers();
             if (m_WaveIn != IntPtr.Zero)
             {
                 WaveNative.waveInClose(m_WaveIn);
             }
         }
         catch (Exception ex)
         {
             LogManage.WriteLog(this.GetType(), ex);
         }
     }
コード例 #3
0
 public bool Record()
 {
     lock (this)
     {
         m_RecordEvent.Reset();
         m_Recording = WaveNative.waveInAddBuffer(m_WaveIn, ref m_Header, Marshal.SizeOf(m_Header)) == WaveNative.MMSYSERR_NOERROR;
         return(m_Recording);
     }
 }
コード例 #4
0
 public bool Play()
 {
     lock (this)
     {
         m_PlayEvent.Reset();
         m_Playing = WaveNative.waveOutWrite(m_WaveOut, ref m_Header, Marshal.SizeOf(m_Header)) == WaveNative.MMSYSERR_NOERROR;
         return(m_Playing);
     }
 }
コード例 #5
0
 public WaveOutPlayer(int device, WaveFormat format, int bufferSize, int bufferCount, BufferFillEventHandler fillProc)
 {
     try
     {
         m_zero     = format.wBitsPerSample == 8 ? (byte)128 : (byte)0;
         m_FillProc = fillProc;
         WaveOutHelper.Try(WaveNative.waveOutOpen(out m_WaveOut, device, format, m_BufferProc, 0, WaveNative.CALLBACK_FUNCTION));
         AllocateBuffers(bufferSize, bufferCount);
         m_Thread = new Thread(new ThreadStart(ThreadProc));
         m_Thread.Start();
     }
     catch (Exception ex)
     {
         LogManage.WriteLog(this.GetType(), ex);
     }
 }
コード例 #6
0
ファイル: WaveIn.cs プロジェクト: Jackjet/conference
 public WaveInBuffer(IntPtr waveInHandle, int size)
 {
     try
     {
         m_WaveIn                = waveInHandle;
         m_HeaderHandle          = GCHandle.Alloc(m_Header, GCHandleType.Pinned);
         m_Header.dwUser         = (IntPtr)GCHandle.Alloc(this);
         m_HeaderData            = new byte[size];
         m_HeaderDataHandle      = GCHandle.Alloc(m_HeaderData, GCHandleType.Pinned);
         m_Header.lpData         = m_HeaderDataHandle.AddrOfPinnedObject();
         m_Header.dwBufferLength = size;
         WaveInHelper.Try(WaveNative.waveInPrepareHeader(m_WaveIn, ref m_Header, Marshal.SizeOf(m_Header)));
     }
     catch (Exception ex)
     {
         LogManage.WriteLog(this.GetType(), ex);
     }
 }
コード例 #7
0
 public WaveInRecorder(int device, WaveFormat format, int bufferSize, int bufferCount, BufferDoneEventHandler doneProc)
 {
     try
     {
         m_DoneProc = doneProc;
         WaveInHelper.Try(WaveNative.waveInOpen(out m_WaveIn, device, format, m_BufferProc, 0, WaveNative.CALLBACK_FUNCTION));
         AllocateBuffers(bufferSize, bufferCount);
         for (int i = 0; i < bufferCount; i++)
         {
             SelectNextBuffer();
             m_CurrentBuffer.Record();
         }
         WaveInHelper.Try(WaveNative.waveInStart(m_WaveIn));
         m_Thread = new Thread(new ThreadStart(ThreadProc));
         m_Thread.Start();
     }
     catch (Exception ex)
     {
         LogManage.WriteLog(this.GetType(), ex);
     }
 }
コード例 #8
0
 public void Dispose()
 {
     try
     {
         if (m_Header.lpData != IntPtr.Zero)
         {
             WaveNative.waveInUnprepareHeader(m_WaveIn, ref m_Header, Marshal.SizeOf(m_Header));
             m_HeaderHandle.Free();
             m_Header.lpData = IntPtr.Zero;
         }
         m_RecordEvent.Close();
         if (m_HeaderDataHandle.IsAllocated)
         {
             m_HeaderDataHandle.Free();
         }
         GC.SuppressFinalize(this);
     }
     catch (Exception ex)
     {
         LogManage.WriteLog(this.GetType(), ex);
     }
 }