WaveHeader.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Speech / Src / Internal / Synthesis / WaveHeader.cs / 1 / WaveHeader.cs

                            //------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// 
//  This class defines the header used to identify a waveform-audio
//  buffer. 
// 
// with the CLR 607
// History: 
//		2/1/2005	jeanfp		Created from the Sapi Managed code
//-----------------------------------------------------------------

using System; 
using System.Runtime.InteropServices;
using System.Speech.Synthesis.TtsEngine; 
 
namespace System.Speech.Internal.Synthesis
{ 
    /// 
    ///
    /// 
    internal sealed class WaveHeader : IDisposable 
    {
        //******************************************************************* 
        // 
        // Constructors
        // 
        //*******************************************************************

        #region Constructors
 
        /// 
        /// Initialize an instance of a byte array. 
        ///  
        /// 
        /// MMSYSERR.NOERROR if successful 
        internal WaveHeader (byte [] buffer)
        {
            _dwBufferLength = buffer.Length;
            _gcHandle = GCHandle.Alloc (buffer, GCHandleType.Pinned); 
        }
 
        ///  
        /// Frees any memory allocated for the buffer.
        ///  
        ~WaveHeader ()
        {
            Dispose (false);
        } 

        ///  
        /// TODOC 
        /// 
        public void Dispose () 
        {
            Dispose (true);
            GC.SuppressFinalize (this);
        } 

        ///  
        /// Frees any memory allocated for the buffer. 
        /// 
        private void Dispose (bool disposing) 
        {
            if (disposing)
            {
                ReleaseData (); 
                if (_gcHandleWaveHdr.IsAllocated)
                { 
                    _gcHandleWaveHdr.Free (); 
                }
            } 
        }

        #endregion
 
        //********************************************************************
        // 
        // Internal Methods 
        //
        //******************************************************************* 

        #region Internal Methods

        internal void ReleaseData () 
        {
            if (_gcHandle.IsAllocated) 
            { 
                _gcHandle.Free ();
            } 
        }

        #endregion
 
        //********************************************************************
        // 
        // Internal Properties 
        //
        //******************************************************************** 

        #region Internal Properties
        internal GCHandle WAVEHDR
        { 
            get
            { 
                if (!_gcHandleWaveHdr.IsAllocated) 
                {
                    _waveHdr.lpData = _gcHandle.AddrOfPinnedObject (); 
                    _waveHdr.dwBufferLength = (uint) _dwBufferLength;
                    _waveHdr.dwBytesRecorded = 0;
                    _waveHdr.dwUser = 0;
                    _waveHdr.dwFlags = 0; 
                    _waveHdr.dwLoops = 0;
                    _waveHdr.lpNext = IntPtr.Zero; 
                    _gcHandleWaveHdr = GCHandle.Alloc (_waveHdr, GCHandleType.Pinned); 
                }
                return _gcHandleWaveHdr; 
            }
        }

        internal int SizeHDR 
        {
            get 
            { 
                return Marshal.SizeOf (_waveHdr);
            } 
        }

        #endregion
 
        //*******************************************************************
        // 
        // Internal Fields 
        //
        //******************************************************************** 

        #region Internal Fields

        ///  
        /// Used by dwFlags in WaveHeader
        /// Set by the device driver to indicate that it is finished with the buffer 
        /// and is returning it to the application. 
        /// 
        internal const int WHDR_DONE = 0x00000001; 
        /// 
        /// Used by dwFlags in WaveHeader
        /// Set by Windows to indicate that the buffer has been prepared with the
        /// waveInPrepareHeader or waveOutPrepareHeader function. 
        /// 
        internal const int WHDR_PREPARED = 0x00000002; 
        ///  
        /// Used by dwFlags in WaveHeader
        /// This buffer is the first buffer in a loop. This flag is used only with 
        /// output buffers.
        /// 
        internal const int WHDR_BEGINLOOP = 0x00000004;
        ///  
        /// Used by dwFlags in WaveHeader
        /// This buffer is the last buffer in a loop. This flag is used only with 
        /// output buffers. 
        /// 
        internal const int WHDR_ENDLOOP = 0x00000008; 
        /// 
        /// Used by dwFlags in WaveHeader
        /// Set by Windows to indicate that the buffer is queued for playback.
        ///  
        internal const int WHDR_INQUEUE = 0x00000010;
 
        ///  
        /// Set in WaveFormat.wFormatTag to specify PCM data.
        ///  
        internal const int WAVE_FORMAT_PCM = 1;

        #endregion
 
        //*******************************************************************
        // 
        // Private Fields 
        //
        //******************************************************************* 

        #region private Fields

        ///  
        /// Long pointer to the address of the waveform buffer. This buffer must
        /// be block-aligned according to the nBlockAlign member of the 
        /// WaveFormat structure used to open the device. 
        /// 
        private GCHandle _gcHandle = new GCHandle (); 

        private GCHandle _gcHandleWaveHdr = new GCHandle ();

        private WAVEHDR _waveHdr = new WAVEHDR (); 

        ///  
        /// Specifies the length, in bytes, of the buffer. 
        /// 
        internal int _dwBufferLength; 

        #endregion

    } 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// 
//  This class defines the header used to identify a waveform-audio
//  buffer. 
// 
// with the CLR 607
// History: 
//		2/1/2005	jeanfp		Created from the Sapi Managed code
//-----------------------------------------------------------------

using System; 
using System.Runtime.InteropServices;
using System.Speech.Synthesis.TtsEngine; 
 
namespace System.Speech.Internal.Synthesis
{ 
    /// 
    ///
    /// 
    internal sealed class WaveHeader : IDisposable 
    {
        //******************************************************************* 
        // 
        // Constructors
        // 
        //*******************************************************************

        #region Constructors
 
        /// 
        /// Initialize an instance of a byte array. 
        ///  
        /// 
        /// MMSYSERR.NOERROR if successful 
        internal WaveHeader (byte [] buffer)
        {
            _dwBufferLength = buffer.Length;
            _gcHandle = GCHandle.Alloc (buffer, GCHandleType.Pinned); 
        }
 
        ///  
        /// Frees any memory allocated for the buffer.
        ///  
        ~WaveHeader ()
        {
            Dispose (false);
        } 

        ///  
        /// TODOC 
        /// 
        public void Dispose () 
        {
            Dispose (true);
            GC.SuppressFinalize (this);
        } 

        ///  
        /// Frees any memory allocated for the buffer. 
        /// 
        private void Dispose (bool disposing) 
        {
            if (disposing)
            {
                ReleaseData (); 
                if (_gcHandleWaveHdr.IsAllocated)
                { 
                    _gcHandleWaveHdr.Free (); 
                }
            } 
        }

        #endregion
 
        //********************************************************************
        // 
        // Internal Methods 
        //
        //******************************************************************* 

        #region Internal Methods

        internal void ReleaseData () 
        {
            if (_gcHandle.IsAllocated) 
            { 
                _gcHandle.Free ();
            } 
        }

        #endregion
 
        //********************************************************************
        // 
        // Internal Properties 
        //
        //******************************************************************** 

        #region Internal Properties
        internal GCHandle WAVEHDR
        { 
            get
            { 
                if (!_gcHandleWaveHdr.IsAllocated) 
                {
                    _waveHdr.lpData = _gcHandle.AddrOfPinnedObject (); 
                    _waveHdr.dwBufferLength = (uint) _dwBufferLength;
                    _waveHdr.dwBytesRecorded = 0;
                    _waveHdr.dwUser = 0;
                    _waveHdr.dwFlags = 0; 
                    _waveHdr.dwLoops = 0;
                    _waveHdr.lpNext = IntPtr.Zero; 
                    _gcHandleWaveHdr = GCHandle.Alloc (_waveHdr, GCHandleType.Pinned); 
                }
                return _gcHandleWaveHdr; 
            }
        }

        internal int SizeHDR 
        {
            get 
            { 
                return Marshal.SizeOf (_waveHdr);
            } 
        }

        #endregion
 
        //*******************************************************************
        // 
        // Internal Fields 
        //
        //******************************************************************** 

        #region Internal Fields

        ///  
        /// Used by dwFlags in WaveHeader
        /// Set by the device driver to indicate that it is finished with the buffer 
        /// and is returning it to the application. 
        /// 
        internal const int WHDR_DONE = 0x00000001; 
        /// 
        /// Used by dwFlags in WaveHeader
        /// Set by Windows to indicate that the buffer has been prepared with the
        /// waveInPrepareHeader or waveOutPrepareHeader function. 
        /// 
        internal const int WHDR_PREPARED = 0x00000002; 
        ///  
        /// Used by dwFlags in WaveHeader
        /// This buffer is the first buffer in a loop. This flag is used only with 
        /// output buffers.
        /// 
        internal const int WHDR_BEGINLOOP = 0x00000004;
        ///  
        /// Used by dwFlags in WaveHeader
        /// This buffer is the last buffer in a loop. This flag is used only with 
        /// output buffers. 
        /// 
        internal const int WHDR_ENDLOOP = 0x00000008; 
        /// 
        /// Used by dwFlags in WaveHeader
        /// Set by Windows to indicate that the buffer is queued for playback.
        ///  
        internal const int WHDR_INQUEUE = 0x00000010;
 
        ///  
        /// Set in WaveFormat.wFormatTag to specify PCM data.
        ///  
        internal const int WAVE_FORMAT_PCM = 1;

        #endregion
 
        //*******************************************************************
        // 
        // Private Fields 
        //
        //******************************************************************* 

        #region private Fields

        ///  
        /// Long pointer to the address of the waveform buffer. This buffer must
        /// be block-aligned according to the nBlockAlign member of the 
        /// WaveFormat structure used to open the device. 
        /// 
        private GCHandle _gcHandle = new GCHandle (); 

        private GCHandle _gcHandleWaveHdr = new GCHandle ();

        private WAVEHDR _waveHdr = new WAVEHDR (); 

        ///  
        /// Specifies the length, in bytes, of the buffer. 
        /// 
        internal int _dwBufferLength; 

        #endregion

    } 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK