当前位置:天才代写 > tutorial > C语言/C++ 教程 > 波形捕获:(4)建设一个“捕获缓冲区”

波形捕获:(4)建设一个“捕获缓冲区”

2017-11-03 08:00 星期五 所属: C语言/C++ 教程 浏览:413

挪用 IDirectSoundCapture8::CreateCaptureBuffer 要领建设一个捕获缓冲 区。

该要领的个中一个参数是一个 DSCBUFFERDESC 布局体,该布局体描写了你想 获得的缓冲区的特性。该布局体的最后一个成员是一个 WAVEFORMATEX 布局体。 这个布局体必需用详细的WAV名目来初始化。

留意:假如你的应用措施在播放声音的同时捕获这些声音,当捕获缓冲区的 名目和主缓冲区的纷歧样,那么捕获缓冲区的建设将会失败。其原因是有些声卡 只有单一的时钟频率,不支持以两种差异的频率来捕获和播放。

下面的函数建设了一个捕获缓冲区,这个缓冲区将会容纳1秒钟的数据。留意 :捕获设备工具的接口要作为一个参数传入时,该接口必需通过 DirectSoundCaptureCreate8 函数获得,而不是利用以前的 DirectSoundCaptureCreate 函数;不然这个缓冲区将不支持 IDirectSoundCaptureBuffer8 接口。

Code

HRESULT CreateCaptureBuffer(LPDIRECTSOUNDCAPTURE8 pDSC,
              LPDIRECTSOUNDCAPTUREBUFFER8* ppDSCB8)
{
 HRESULT hr;
 DSCBUFFERDESC        dscbd;
 LPDIRECTSOUNDCAPTUREBUFFER pDSCB;
 WAVEFORMATEX        wfx =
  {WAVE_FORMAT_PCM, 2, 44100, 176400, 4, 16, 0};
  // wFormatTag, nChannels, nSamplesPerSec, mAvgBytesPerSec,
  // nBlockAlign, wBitsPerSample, cbSize
 if ((NULL == pDSC) || (NULL == ppDSCB8)) return E_INVALIDARG;
 dscbd.dwSize = sizeof(DSCBUFFERDESC);
 dscbd.dwFlags = 0;
 dscbd.dwBufferBytes = wfx.nAvgBytesPerSec;
 dscbd.dwReserved = 0;
 dscbd.lpwfxFormat = &wfx;
 dscbd.dwFXCount = 0;
 dscbd.lpDSCFXDesc = NULL;
 if (SUCCEEDED(hr = pDSC->CreateCaptureBuffer(&dscbd, &pDSCB, NULL)))
 {
  hr = pDSCB->QueryInterface(IID_IDirectSoundCaptureBuffer8, (LPVOID*)ppDSCB8);
  pDSCB->Release();
 }
 return hr;
}

 

    关键字:

天才代写-代写联系方式