Example #1
0
        private int WriteWaveOut(IntPtr buf, int size)
        {
            int ret;
            WaveNative.WaveHdr m_Header = new WaveNative.WaveHdr(); ;
            GCHandle m_HeaderHandle = GCHandle.Alloc(m_Header, GCHandleType.Pinned);
            m_Header.dwUser = (IntPtr)GCHandle.Alloc(this);
            m_Header.lpData = buf;
            m_Header.dwBufferLength = size;
            ret = WaveNative.waveOutPrepareHeader(waveOut, ref m_Header, Marshal.SizeOf(m_Header));
            if (ret != WaveNative.MMSYSERR_NOERROR)
                throw new Exception("can not open wave device");

            lock (queue)
            {
                ret = WaveNative.waveOutWrite(waveOut, ref m_Header, Marshal.SizeOf(m_Header));
            }
            if (ret != WaveNative.MMSYSERR_NOERROR)
                throw new Exception("can not open wave device");

            while (WaveNative.waveOutUnprepareHeader(waveOut, ref m_Header, Marshal.SizeOf(m_Header)) == WaveNative.WAVERR_STILLPLAYING)
            {
                Thread.Sleep(5);
            }

            ((GCHandle)m_Header.dwUser).Free();
            m_HeaderHandle.Free();
            return ret;
        }
Example #2
0
 internal static void WaveInProc(IntPtr hdrvr, int uMsg, int dwUser, ref WaveNative.WaveHdr wavhdr, int dwParam2)
 {
     if (uMsg == WaveNative.MM_WIM_DATA)
     {
         GCHandle     h   = (GCHandle)wavhdr.dwUser;
         WaveInBuffer buf = (WaveInBuffer)h.Target;
         buf.OnCompleted();
     }
 }
Example #3
0
 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
         {
         }
     }
 }
Example #4
0
 internal static void WaveOutProc(
     IntPtr hdrvr,
     int uMsg,
     int dwUser,
     ref WaveNative.WaveHdr wavhdr,
     int dwParam2)
 {
     if (uMsg != 957)
     {
         return;
     }
     try
     {
         ((WaveOutBuffer)((GCHandle)wavhdr.dwUser).Target).OnCompleted();
     }
     catch
     {
     }
 }
Example #5
0
 public static extern int waveOutWrite(
     IntPtr hWaveOut,
     ref WaveNative.WaveHdr lpWaveOutHdr,
     int uSize);
Example #6
0
 public static extern int waveOutUnprepareHeader(
     IntPtr hWaveOut,
     ref WaveNative.WaveHdr lpWaveOutHdr,
     int uSize);