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); }
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);