Platform SDK: DirectX |
ここでは、C および C++ でのアプリケーション開発について説明する。Visual Basic については、「DirectSound Visual Basic チュートリアル」を参照すること。
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 種類のイベントを区別できる。