请教:关于DSound的音频采集

iComputerLion 2010-10-21 06:44:24
网上找的代码! 问题出现在这段:
HRESULT CreateCaptureBuffer(LPDIRECTSOUNDCAPTURE8 pDSC, LPDIRECTSOUNDCAPTUREBUFFER8* ppDSCB8)
{
HRESULT hr;
DSCBUFFERDESC dscbd;
LPDIRECTSOUNDCAPTUREBUFFER pDSCB;
WAVEFORMATEX wfx ;//={WAVE_FORMAT_PCM, 2, 44100, 176400, 4, 16, 0};
wfx.cbSize =0;
wfx.nBlockAlign =4;
wfx.nChannels =2;
wfx.nSamplesPerSec =44100;
wfx.wBitsPerSample =8;
wfx.wFormatTag =WAVE_FORMAT_PCM ;
wfx.nAvgBytesPerSec =176400;
// wFormatTag, nChannels, nSamplesPerSec, mAvgBytesPerSec,
// nBlockAlign, wBitsPerSample, cbSize
if ((NULL == pDSC) || (NULL == ppDSCB8))
{
MessageBox (NULL,L"失败",L"",NULL);
return E_INVALIDARG;
}
dscbd.dwSize = sizeof(DSCBUFFERDESC);
dscbd.dwFlags = 0;
dscbd.dwBufferBytes = wfx.nAvgBytesPerSec;
dscbd.dwReserved = 0;
dscbd.lpwfxFormat = &wfx; //设置录音用的wave格式
dscbd.dwFXCount = 0;
dscbd.lpDSCFXDesc = NULL;
if (SUCCEEDED(hr = pDSC->CreateCaptureBuffer(&dscbd, &pDSCB, NULL)))
{
hr = pDSCB->QueryInterface(IID_IDirectSoundCaptureBuffer8, (LPVOID*)ppDSCB8);
if (FAILED (hr)) MessageBox (NULL,L"264失败",L"",NULL);
pDSCB->Release();
}
else
{
MessageBox (NULL,L"262失败",L"",NULL);
}
return hr;

}

这句报告失败:

hr = pDSCB->QueryInterface(IID_IDirectSoundCaptureBuffer8, (LPVOID*)ppDSCB8);
if (FAILED (hr)) MessageBox (NULL,L"264失败",L"",NULL);
记得用C#写过,当时通知会出现问题,而不得已采用绕弯子的方式来规避那个错误。。

这里,缓冲区创建失败,请各位指教
...全文
57 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
iComputerLion 2010-10-23
  • 打赏
  • 举报
回复
按理讲 采样位数 8 和 16都应该支持的啊!
下面这个问题 我测试下!
多谢回复!
tufaqing 2010-10-21
  • 打赏
  • 举报
回复
wfx.wBitsPerSample =8;这个应该是16吧。
你一定要用LPDIRECTSOUNDCAPTUREBUFFER8,用LPDIRECTSOUNDCAPTUREBUFFER不行吗?

2,542

社区成员

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

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