Microsoft DirectX 8.0 (C++)

キャプチャ バッファの作成

キャプチャ バッファを作成するには、IDirectSoundCapture8::CreateCaptureBuffer メソッドを呼び出す。

このメソッドに渡されるパラメータの 1 つは DSCBUFFERDESC 構造体であり、これは希望のバッファの特性を記述している。この構造体の最後のメンバは、WAVEFORMATEX 構造体であるが、目的のウェーブ フォーマットの詳細に従ってこの構造体を初期化しなければならない。

アプリケーションが DirectSound と DirectSoundCapture の両方を使う場合、キャプチャ バッファのフォーマットがプライマリ バッファのフォーマットと異なっていると、キャプチャ バッファの作成は失敗する。一部のカードはクロックを 1 つしか用意していないため、2 つの異なった周波数でキャプチャと再生を行えないのが原因である。

次の例では、およそ 1 秒分のデータを保持するキャプチャ バッファを設定する。

// pDSC は有効な IDirectSoundCapture8 インターフェイス ポインタである。
 
DSCBUFFERDESC              dscbd;
LPDIRECTSOUNDCAPTUREBUFFER pDSCB;
WAVEFORMATEX               wfx =
    {WAVE_FORMAT_PCM, 2, 44100, 176400, 4, 16, 0};
 
    // wFormatTag、nChannels、nSamplesPerSec、mAvgBytesPerSec、
    // nBlockAlign、wBitsPerSample、cbSize
 
dscbd.dwSize = sizeof(DSCBUFFERDESC);
dscbd.dwFlags = 0;
dscbd.dwBufferBytes = wfx.nAvgBytesPerSec;
dscbd.dwReserved = 0;
dscbd.lpwfxFormat = &wfx;
dscbd.dwFXCount = 0;
dscbd.lpDSCFXDesc = NULL;
 
pDSCB = NULL;
 
HRESULT hr = pDSC->CreateCaptureBuffer(&dscbd, 
        &pDSCB, NULL);