Platform SDK: DirectX

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

[C++]

DirectSoundCapture オブジェクトの IDirectSoundCapture::CreateCaptureBuffer メソッドを呼び出して、キャプチャ バッファを作成する。

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

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

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

/* この例では、pDSC が DirectSoundCapture オブジェクトへの
   有効なポインタであることを想定する。*/
 
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;
 
pDSCB = NULL;
 
HRESULT hr = pDSC->CreateCaptureBuffer(&dscbd, 
        &pDSCB, NULL);
 
[Visual Basic]

DirectSoundCapture.CreateCaptureBuffer メソッドを呼び出して、キャプチャ バッファを作成する。

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

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

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

' DSC は DirectSoundCapture オブジェクト。
 
Dim dscbd As DSCBUFFERDESC
Dim DSCB As DirectSoundCaptureBuffer
Dim waveFormat As WAVEFORMATEX
 
' ウェーブ フォーマットを設定する。
 
waveFormat.nSize = LenB(waveFormat)
    waveFormat.nFormatTag = WAVE_FORMAT_PCM
    waveFormat.nChannels = 2
    waveFormat.lSamplesPerSec = 22050
    waveFormat.nBitsPerSample = 16
    waveFormat.nBlockAlign = _
            waveFormat.nBitsPerSample / 8 * WaveFormat.nChannels
    waveFormat.lAvgBytesPerSec = _
            waveFormat.lSamplesPerSec * waveFormat.nBlockAlign
 
' DSCBUFFERDESC を設定する。
 
dscbd.lFlags = DSCBCAPS_DEFAULT
dscbd.lBufferBytes = waveFormat.lAvgBytesPerSec
dscbd.fxFormat = waveFormat
 
' キャプチャ バッファを作成する。
 
Set DSCB = DSC.CreateCaptureBuffer (dscbd)