请教:DSound中建立缓冲区总是出现DSERR_BADFORMAT,请教原因
在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
哪位达人能告诉我为什么,谢谢了!!