游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1299|回复: 1

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

[复制链接]

34

主题

70

帖子

76

积分

注册会员

Rank: 2

积分
76
发表于 2008-2-22 12:51:00 | 显示全部楼层 |阅读模式
    在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
哪位达人能告诉我为什么,谢谢了!!

34

主题

70

帖子

76

积分

注册会员

Rank: 2

积分
76
 楼主| 发表于 2008-2-23 17:33:00 | 显示全部楼层

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

算了,我知道了.DSBCAPS_CTRL3D不支持双通道
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-20 06:05

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表