程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 波形捕捉:(4)創建一個“捕捉緩沖區”

波形捕捉:(4)創建一個“捕捉緩沖區”

編輯:關於C++

調用 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;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved