Platform SDK: DirectX

ステップ 6 : キャプチャの通知の処理

[Visual Basic]

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

[C++]

再生の通知と同様、メッセージ ループ内で、イベントとしてキャプチャの通知を受け取る。ここにサンプル ループを示す。

BOOL Done = FALSE;
while (!Done)
{
    DWORD dwEvt = MsgWaitForMultipleObjects(
            NUMCAPTUREEVENTS,  // 考えられるイベント数。
            rghEvent,          // ハンドルの位置。
            FALSE,             // すべてを待つか。
            INFINITE,          // 待機時間の長さ。
            QS_ALLINPUT);      // あらゆるメッセージはイベントである。
 
    dwEvt -= WAIT_OBJECT_0;
 
    // バッファがイベントを設定していた場合、このプロセスへの
    // 入力が発生する。
 
    if (dwEvt < NUMCAPTUREEVENTS) 
    {
        StreamToFile(); 
    }
 
    // これが最後のイベントである場合、そのイベントはメッセージである。
 
    else if (dwEvt == NUMCAPTUREEVENTS) 
    {         
        while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) 
        {
            if (msg.message == WM_QUIT) 
            {
                Done = TRUE;
            } 
            else
            {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
        }
    }  // メッセージ処理の終了。
} // while (!Done)
 

前述のとおり、キャプチャ バッファとセカンダリ (出力) バッファの両方から通知を受け取った場合、dwEvt 内のインデックス番号を使ってこれら 2 種類のイベントを識別しなければならない。たとえば、イベント 0 と 1 は再生の通知、イベント 2 と 3 はキャプチャの通知ということが考えられる。

次項 : ステップ 7 : ウェーブ ファイルへのデータのストリーミング