コード例 #1
0
        /// <summary>
        ///     waveInProc
        /// </summary>
        /// <param name="hWaveIn"></param>
        /// <param name="msg"></param>
        /// <param name="dwInstance"></param>
        /// <param name="wParam"></param>
        /// <param name="lParam"></param>
        private void waveInProc(IntPtr hWaveIn, Win32.WIM_Messages msg, IntPtr dwInstance, ref Win32.WAVEHDR waveHeader,
                                IntPtr lParam)
        {
            switch (msg)
            {
            //Open
            case Win32.WIM_Messages.OPEN:
                break;

            //Data
            case Win32.WIM_Messages.DATA:
                //Daten sind angekommen
                IsDataIncomming = true;
                //Aufgenommenen Buffer merken
                CurrentRecordedHeader = waveHeader;
                //Event setzen
                AutoResetEventDataRecorded.Set();
                break;

            //Close
            case Win32.WIM_Messages.CLOSE:
                IsDataIncomming = false;
                IsWaveInOpened  = false;
                Stopped         = true;
                AutoResetEventDataRecorded.Set();
                FreeWaveInHeaders();
                this.hWaveIn = IntPtr.Zero;
                break;
            }
        }
コード例 #2
0
        /// <summary>
        ///     waveOutProc
        /// </summary>
        /// <param name="hWaveOut"></param>
        /// <param name="msg"></param>
        /// <param name="dwInstance"></param>
        /// <param name="wParam"></param>
        /// <param name="lParam"></param>
        private void waveOutProc(IntPtr hWaveOut, Win32.WOM_Messages msg, IntPtr dwInstance,
                                 ref Win32.WAVEHDR waveHeader, IntPtr lParam)
        {
            try
            {
                switch (msg)
                {
                //Open
                case Win32.WOM_Messages.OPEN:
                    break;

                //Done
                case Win32.WOM_Messages.DONE:

                    //Vermerken das Daten ankommen
                    IsStarted = true;
                    //Speicher freigeben
                    var hBuffer = GCWaveOutHandleBuffers[(int)waveHeader.dwUser];
                    if (hBuffer.IsAllocated)
                    {
                        //Wenn wirklich belegt
                        if ((waveHeader.dwFlags & Win32.WaveHdrFlags.WHDR_DONE) > 0 &&
                            ((waveHeader.dwFlags & Win32.WaveHdrFlags.WHDR_PREPARED) > 0))
                        {
                            hBuffer.Free();
                        }
                    }
                    AutoResetEventDataPlayed.Set();
                    break;

                //Close
                case Win32.WOM_Messages.CLOSE:
                    IsStarted       = false;
                    IsWaveOutOpened = false;
                    IsPaused        = false;
                    IsClosed        = true;
                    AutoResetEventDataPlayed.Set();
                    FreeWaveOutHeaders();
                    this.hWaveOut = IntPtr.Zero;
                    break;
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(String.Format("Player.cs | waveOutProc() | {0}", ex.Message));
                AutoResetEventDataPlayed.Set();
            }
        }
コード例 #3
0
        /// <summary>
        ///     waveOutProc
        /// </summary>
        /// <param name="hWaveOut"></param>
        /// <param name="msg"></param>
        /// <param name="dwInstance"></param>
        /// <param name="wParam"></param>
        /// <param name="lParam"></param>
        private void waveOutProc(IntPtr hWaveOut, Win32.WOM_Messages msg, IntPtr dwInstance,
                                 ref Win32.WAVEHDR waveHeader, IntPtr lParam)
        {
            switch (msg)
            {
            //Open
            case Win32.WOM_Messages.OPEN:
                break;

            //Close
            case Win32.WOM_Messages.CLOSE:
                IsWaveOutOpened = false;
                AutoResetEventDataRecorded.Set();
                FreeWaveOutHeaders();
                this.hWaveOut = IntPtr.Zero;
                break;
            }
        }
コード例 #4
0
        private void WaveInProc(IntPtr hWaveIn, Win32.WIM_Messages msg, IntPtr dwInstance, ref Win32.WAVEHDR waveHeader, IntPtr lParam)
        {
            switch (msg)
            {
            case Win32.WIM_Messages.OPEN:
                break;

            case Win32.WIM_Messages.DATA:
                _isDataIncomming       = true;
                _currentRecordedHeader = waveHeader;
                _autoResetEventDataRecorded.Set();
                break;

            case Win32.WIM_Messages.CLOSE:
                _isDataIncomming = false;
                _isWaveInOpened  = false;
                _autoResetEventDataRecorded.Set();
                FreeWaveInHeaders();
                _hWaveIn = IntPtr.Zero;
                break;
            }
        }
コード例 #5
0
 /// <summary>
 ///     IsHeaderInqueue
 /// </summary>
 /// <param name="flags"></param>
 /// <returns></returns>
 private bool IsHeaderInqueue(Win32.WAVEHDR header)
 {
     return((header.dwFlags & Win32.WaveHdrFlags.WHDR_INQUEUE) > 0);
 }
コード例 #6
0
 /// <summary>
 ///     IsHeaderPrepared
 /// </summary>
 /// <param name="flags"></param>
 /// <returns></returns>
 private bool IsHeaderPrepared(Win32.WAVEHDR header)
 {
     return((header.dwFlags & Win32.WaveHdrFlags.WHDR_PREPARED) > 0);
 }