Пример #1
0
        public void Dispose()
        {
            if (m_Thread != null)
            {
                try
                {
                    m_Pause    = false;
                    m_Finished = true;
                    if (m_WaveOut != IntPtr.Zero)
                    {
                        WaveOutBase.waveOutReset(m_WaveOut);
                    }

                    m_Thread.Abort();
                    //m_Thread.Join();

                    m_FillProc = null;
                    FreeBuffers();
                    if (m_WaveOut != IntPtr.Zero)
                    {
                        WaveOutBase.waveOutClose(m_WaveOut);
                    }
                }
                finally
                {
                    m_Thread  = null;
                    m_WaveOut = IntPtr.Zero;
                }
            }
            GC.SuppressFinalize(this);
        }
Пример #2
0
 public bool Play()
 {
     lock (this)
     {
         m_PlayEvent.Reset();
         m_Playing = WaveOutBase.waveOutWrite(m_WaveOut, ref m_Header, Marshal.SizeOf(m_Header)) == WaveOutBase.MMSYSERR_NOERROR;
         return(m_Playing);
     }
 }
Пример #3
0
 public WaveOut(int device, WaveFormat format, int bufferSize, int bufferCount, BufferFillEventHandler fillProc)
 {
     m_zero     = format.wBitsPerSample == 8 ? (byte)128 : (byte)0;
     m_FillProc = fillProc;
     WaveOutHelper.Try(WaveOutBase.waveOutOpen(out m_WaveOut, device, format, m_BufferProc, 0, WaveOutBase.CALLBACK_FUNCTION));
     AllocateBuffers(bufferSize, bufferCount);
     m_Thread = new Thread(new ThreadStart(ThreadProc));
     m_Thread.Start();
 }
Пример #4
0
        public WaveOutBuffer(IntPtr waveOutHandle, int size)
        {
            m_WaveOut = waveOutHandle;

            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;
            WaveOutHelper.Try(WaveOutBase.waveOutPrepareHeader(m_WaveOut, ref m_Header, Marshal.SizeOf(m_Header)));
        }
Пример #5
0
 public void Dispose()
 {
     if (m_Header.lpData != IntPtr.Zero)
     {
         WaveOutBase.waveOutUnprepareHeader(m_WaveOut, ref m_Header, Marshal.SizeOf(m_Header));
         m_HeaderHandle.Free();
         m_Header.lpData = IntPtr.Zero;
     }
     m_PlayEvent.Close();
     if (m_HeaderDataHandle.IsAllocated)
     {
         m_HeaderDataHandle.Free();
     }
     GC.SuppressFinalize(this);
 }
Пример #6
0
 public void Resume()
 {
     m_Pause = false;
     WaveOutBase.waveOutRestart(m_WaveOut);
 }
Пример #7
0
 public void Pause()
 {
     m_Pause = true;
     WaveOutBase.waveOutPause(m_WaveOut);
     //WaveOutBase.waveOutReset(m_WaveOut);
 }