Platform SDK: DirectX

ステップ 4 : キャプチャの通知の設定

[Visual Basic]

ここでは、C および C++ でのアプリケーション開発について説明する。Visual Basic については、「DirectSound Visual Basic チュートリアル」を参照すること。

[C++]

InitDSoundCapture 関数の最後の初期化ステップとして、キャプチャ バッファ内の通知位置を設定し、アプリケーションが他のデータをファイルにストリームする時期を把握できるようにする。この例では、これらの位置をバッファの先頭と中間に設定する。

最初に、必要な数のイベントを作成し、それらのハンドルを rghEvent 配列に保存する。

    for (int i = 0; i < NUMCAPTUREEVENTS; i++)
    {
        rghEvent[i] = CreateEvent(NULL, FALSE, FALSE, NULL);
        if (NULL == rghEvent[i]) return FALSE;
    }
 

次に、DSBPOSITIONNOTIFY 構造体の配列を作成する。各構造体は、バッファ内の位置をイベント ハンドルに関連付ける。

    rgdscbpn[0].dwOffset = 0;
    rgdscbpn[0].hEventNotify = rghEvent[0];
    rgdscbpn[1].dwOffset = dscbDesc.dwBufferBytes/2;
    rgdscbpn[1].hEventNotify = rghEvent[1];
 

最後にキャプチャ バッファから IDirectSoundNotify インターフェイスを取得し、DSBPOSITIONNOTIFY 配列を SetNotificationPositions メソッドに渡す。

    if FAILED(IDirectSoundCaptureBuffer_QueryInterface(lpdscb, 
            IID_IDirectSoundNotify, (VOID **)&lpdsNotify))
        return FALSE; 
 
    if FAILED(IDirectSoundNotify_SetNotificationPositions(lpdsNotify,
            NUMCAPTUREEVENTS, rgdscbpn))
    {
        IDirectSoundNotify_Release(lpdsNotify);
        return FALSE;
    }
 
    return TRUE;
}  // InitDSoundCapture() の終わり。
 

キャプチャ バッファとセカンダリ (出力) バッファの両方に通知を設定する必要がある場合、イベント ハンドルを同じ rghEvent 配列に保存しなければならない。メッセージ ループ内で通知を受け取ったときに、インデックス番号によってそれら 2 種類のイベントを区別できる。

次項 : ステップ 5 : ウェーブ ファイルの作成