waveOutOpen 函数说明

使用心得:首先打开声音输出设备,然后初始化输出内存,并保证不要使用缓存;(调用waveOutPrepareHeader设置内存),然后通过回调函数进行状态通知。通过waveOutWrite进行声音播放;

最后调用waveOutUnprepareHeader释放内存,waveOutReset(m_hWaveOut);
   waveOutClose(m_hWaveOut);关闭音频设备

//声明:
waveOutOpen(
  lphWaveOut: PHWaveOut;  {用于返回设备句柄的指针; 如果 dwFlags=WAVE_FORMAT_QUERY, 这里应是 nil}
  uDeviceID: UINT;        {设备ID; 可以指定为: WAVE_MAPPER, 这样函数会根据给定的波形格式选择合适的设备}
  lpFormat: PWaveFormatEx; {TWaveFormat 结构的指针; TWaveFormat 包含要申请的波形格式}
  dwCallback: DWORD       {回调函数地址或窗口句柄; 若不使用回调机制, 设为 nil}
  dwInstance: DWORD       {给回调函数的实例数据; 不用于窗口}
  dwFlags: DWORD          {打开选项}
): MMRESULT;              {成功返回 0; 可能的错误值见下:}

MMSYSERR_BADDEVICEID = 2{设备ID超界}
MMSYSERR_ALLOCATED   = 4{指定的资源已被分配}
MMSYSERR_NODRIVER    = 6{没有安装驱动程序}
MMSYSERR_NOMEM       = 7{不能分配或锁定内存}
WAVERR_BADFORMAT     = 32; {设备不支持请求的波形格式}

//TWaveFormatEx 结构:
TWaveFormatEx = packed record
  wFormatTag: Word;      {指定格式类型; 默认 WAVE_FORMAT_PCM = 1;}
  nChannels: Word;       {指出波形数据的通道数; 单声道为 1, 立体声为 2}
  nSamplesPerSec: DWORD; {指定样本速率(每秒的样本数)}一般为8000
  nAvgBytesPerSec: DWORD; {指定数据传输的平均速率(每秒的字节数)} 每秒的字节数: 
  nBlockAlign: Word;     {指定块对齐(单位字节), 块对齐是数据的最小单位}
  wBitsPerSample: Word;  {采样大小(字节)}每个样本的BIT数目,一般为16
  cbSize: Word;          {应该是该结构的大小}
end;
{16 位立体声 PCM 的块对齐是 4 字节(每个样本2字节, 2个通道)}

//打开选项 dwFlags 的可选值:
WAVE_FORMAT_QUERY = $0001;    {只是判断设备是否支持给定的格式, 并不打开}
WAVE_ALLOWSYNC    = $0002;   

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值