请教:DSound中建立缓冲区总是出现DSERR_BADFORMAT,请教原因

s_51563946 2008-02-22 07:50:35
在Dsound中建立缓冲区(CreateSoundBuffer)总是提示我格式错误.我填写的格式方法如下:
音频的结构为
WAVEFORMATEX wfx;
memset(&wfx, 0, sizeof(WAVEFORMATEX));
wfx.wFormatTag = WAVE_FORMAT_PCM;
wfx.nChannels = decoder->channels();
wfx.wBitsPerSample = decoder->sample_bit();
wfx.nSamplesPerSec = decoder->frequency();
wfx.nBlockAlign = wfx.nChannels*wfx.wBitsPerSample/8;
wfx.nAvgBytesPerSec = wfx.nSamplesPerSec * wfx.nBlockAlign;

这些在运行期的数值是:
wfx.wFormatTag = 1
wfx.nChannels = 2
wfx.wBitsPerSample = 16
wfx.nSamplesPerSec = 44100
wfx.nBlockAlign = 4
wfx.nAvgBytesPerSec = 176400

缓冲区的属性为:
DSBUFFERDESC dsbdesc;
memset(&dsbdesc, 0, sizeof(DSBUFFERDESC));
dsbdesc.dwSize = sizeof(dsbdesc);
dsbdesc.dwFlags = DSBCAPS_GLOBALFOCUS | DSBCAPS_CTRLPOSITIONNOTIFY |
DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_CTRL3D;
dsbdesc.dwBufferBytes = block_size*block_num;
dsbdesc.lpwfxFormat = &wfx;
其中block_size = 4096*8, block_num = 2.
不知道这样填写有什么问题,老是出错.而另一个单声道的音频文件打开又是正确的,其中数据为:
wfx.wFormatTag = 1
wfx.nChannels = 1
wfx.wBitsPerSample = 16
wfx.nSamplesPerSec = 44100
wfx.nBlockAlign = 2
wfx.nAvgBytesPerSec = 88200
哪位达人能告诉我为什么,谢谢了!!

...全文
135 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
s_51563946 2008-02-23
  • 打赏
  • 举报
回复
算了,我知道了. DSBCAPS_CTRL3D双声道音频不支持使用3D音效

2,554

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧