请教:关于DSound的音频采集
网上找的代码! 问题出现在这段:
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#写过,当时通知会出现问题,而不得已采用绕弯子的方式来规避那个错误。。
这里,缓冲区创建失败,请各位指教