Пример #1
0
        public PCMPlayer()
        {
            if (waveOutGetNumDevs() <= 0)
            {
                throw new Exception("Cannot find the your computer audio output device."); // 无法找到您电脑的音频输出设备
            }

            //sWaveFormat.nSamplesPerSec = 44100; // 波形采样
            //sWaveFormat.nAvgBytesPerSec = 176400; // 平均传输率
            //sWaveFormat.wFormatTag = 1; // 波形格式
            //sWaveFormat.nChannels = 2; // 声道
            //sWaveFormat.wBitsPerSample = 16; // 采样位深
            //sWaveFormat.nBlockAlign = 2 * 16 / 8; // 块对齐
            //sWaveFormat.cbSize = 16; // 结构尺寸

            sWaveFormat.wFormatTag      = 1;                                                    //设置波形声音的格式
            sWaveFormat.nChannels       = 1;                                                    //设置音频文件的通道数量
            sWaveFormat.nSamplesPerSec  = 16000;                                                //设置每个声道播放和记录时的样本频率
            sWaveFormat.nBlockAlign     = 2;                                                    //以字节为单位设置块对齐
            sWaveFormat.nAvgBytesPerSec = sWaveFormat.nBlockAlign * sWaveFormat.nSamplesPerSec; //设置请求的平均数据传输率,单位byte/s。这个值对于创建缓冲大小是很有用的
            sWaveFormat.wBitsPerSample  = 16;
            sWaveFormat.cbSize          = 16;                                                   //额外信息的大小

            pfnDevNotify = DeviceNotify;
            GCHandle.Alloc(pfnDevNotify, GCHandleType.Normal);
        }
Пример #2
0
        public WavePlayer()
        {
            if (waveOutGetNumDevs() <= 0)
            {
                throw new Exception("Cannot find the your computer audio output device."); // 无法找到您电脑的音频输出设备
            }

            sWaveFormat.nSamplesPerSec  = 16000 / 2;  // 波形采样
            sWaveFormat.nAvgBytesPerSec = 176400;     // 平均传输率
            sWaveFormat.wFormatTag      = 1;          // 波形格式
            sWaveFormat.nChannels       = 2;          // 声道
            sWaveFormat.wBitsPerSample  = 16;         // 采样位深
            sWaveFormat.nBlockAlign     = 2 * 16 / 8; // 块对齐
            sWaveFormat.cbSize          = 16;         // 结构尺寸

            pfnDevNotify = DeviceNotify;
            GCHandle.Alloc(pfnDevNotify, GCHandleType.Normal);
        }
 public static extern int waveOutOpen(ref IntPtr hWaveOut,
                                      int uDeviceID,
                                      ref WAVEFORMATEX lpFormat,
                                      [MarshalAs(UnmanagedType.FunctionPtr)] DeviceNotifyPtr dwCallback,
                                      int dwInstance,
                                      int dwFlags);