posts - 7, comments - 5, trackbacks - 0, articles - 4

[DSound]CreateSoundBuffer()失败问题

Posted on 2008-10-27 22:41 阿呆 阅读(1654) 评论(0)  编辑 收藏 引用 所属分类: MFC工作随笔

 以下代码,在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) 
15


在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


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理