Platform SDK: DirectX

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

[C++]

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

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

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

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

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

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

[Visual Basic]

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

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

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

  4. 全データのキャプチャが終わるまで、ステップ 2 から 3 を繰り返す。次に、DirectSoundCaptureBuffer.Stop メソッドを呼び出す。

デフォルトでは、キャプチャ位置がバッファの最後に達すると、バッファはキャプチャリングを自動的に停止する。しかし、DirectSoundCaptureBuffer.Start メソッドに渡す flags パラメータで DSCBSTART_LOOPING フラグをセットした場合は、アプリケーションが DirectSoundCapture.Stop メソッドを呼び出すまでキャプチャは続行される。