Microsoft DirectX 8.0 (C++)

キャプチャ バッファの使い方

サウンドのキャプチャは、次のステップで構成される。

  1. IDirectSoundCaptureBuffer8::Start メソッドを呼び出してバッファリングを開始する。入力デバイスから得たオーディオ データを、バッファの開始位置以降に書き込む。
  2. 希望の量のデータが利用可能になるまで待つ。キャプチャ カーソルが特定の地点に達する時期を決定する方法の 1 つについては、「キャプチャ バッファの通知」を参照すること。
  3. 十分なデータが利用可能になったとき、IDirectSoundCaptureBuffer8::Lock メソッドを呼び出してキャプチャ バッファの一部をロックする。

    ロックを試みる部分が、キャプチャに使われようとしているメモリ部分と重なっていないことを確認するには、最初に IDirectSoundCaptureBuffer8::GetCurrentPosition を呼び出して現在の読み込みカーソルの位置を取得する。読み込みカーソルについては、「キャプチャ バッファの情報」を参照すること。

    Lock メソッドのパラメータとして、読み込みたいメモリ ブロックのサイズとオフセットを渡す。このメソッドは、メモリ ブロック開始位置のアドレスへのポインタと、ブロックのサイズを返す。ブロックがバッファの最後から最初へラップ アラウンドしている (先頭へ戻っている) 場合、ブロックのセクションごとに 1 つ、合計 2 つのポインタが返される。バッファのロック部分がラップ アラウンドしていない場合は、2 番目のポインタは NULL である。

  4. Lock メソッドが返したアドレスとブロック サイズを使って、バッファからデータをコピーする。
  5. IDirectSoundCaptureBuffer8::Unlock メソッドを使って、バッファをアンロックする。
  6. 全データのキャプチャが終わるまで、ステップ 2 から 5 を繰り返す。次に、IDirectSoundCaptureBuffer8::Stop メソッドを呼び出す。

通常、キャプチャ カーソルがバッファの最後に達すると、バッファはキャプチャリングを自動的に停止する。しかし、IDirectSoundCaptureBuffer8::Start メソッドに渡す dwFlags パラメータで DSCBSTART_LOOPING フラグを設定した場合は、アプリケーションが IDirectSoundCaptureBuffer8::Stop メソッドを呼び出すまでキャプチャは続行される。