织梦CMS - 轻松建站从此开始!

罗索

CreateSoundBuffer()失败问题

落鹤生 发布于 2013-01-21 22:17 点击:次 
在格式为WAVE_FORMAT_PCM的时候,设置wBitsPerSample为24是不可以的,所以会创建失败。在wBitsPerSample = 24时,需要使用WAVE_FORMAT_EXTENSIBLE格式。
TAG:

以下代码,在XP上,CreateSoundBuffer失败,返回E_INVALIDARG,即参数设置错误。

  1. pcmwf.wFormatTag    =  WAVE_FORMAT_PCM;   
  2. pcmwf.nChannels    =  2;                             
  3. pcmwf.nSamplesPerSec    =  48000;   
  4. pcmwf.wBitsPerSample    =  24;   
  5. pcmwf.nBlockAlign    =  pcmwf.nChannels * pcmwf.wBitsPerSample / 8;                                   
  6. pcmwf.nAvgBytesPerSec  =  pcmwf.nSamplesPerSec  *  pcmwf.nBlockAlign;   
  7.  
  8. dsbd.dwSize =  sizeof(DSBUFFERDESC);  
  9. dsbd.dwFlags =  DSBCAPS_CTRLPAN |   DSBCAPS_CTRLVOLUME
  10.  | DSBCAPS_GLOBALFOCUS | DSBCAPS_CTRLPOSITIONNOTIFY;  
  11. dsbd.dwBufferBytes =  3*11520;  
  12. dsbd.lpwfxFormat =  &pcmwf;   
  13.  
  14. lpds->CreateSoundBuffer(&dsbd,&tmp_ds_buf,NULL)  

在DirectX的SDK中查看WAVE_FORMAT_PCM可以得到关于wBitsPerSample的说明如下:

 If wFormatTag is WAVE_FORMAT_PCM, then wBitsPerSample should be equal to 8 or 16.
If wFormatTag is WAVE_FORMAT_EXTENSIBLE, this value can be any integer multiple of 8.

也就是说,在格式为WAVE_FORMAT_PCM的时候,设置wBitsPerSample为24是不可以的,所以会创建失败。
在wBitsPerSample = 24时,需要使用WAVE_FORMAT_EXTENSIBLE格式。

参考如下文章:

http://www.eggheadcafe.com/forumarchives/win32programmerdirectxaudio/Nov2005/post24249606.asp

(adai123)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201301/16472.html]
本文出处:博客园 作者:adai123 原文
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容