Platform SDK: DirectX |
ここでは、C および C++ でのアプリケーション開発について説明する。Visual Basic については、「DirectSound Visual Basic チュートリアル」を参照すること。
再生の通知と同様、メッセージ ループ内で、イベントとしてキャプチャの通知を受け取る。ここにサンプル ループを示す。
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 はキャプチャの通知ということが考えられる。