Microsoft DirectX 8.0 (Visual Basic) |
DirectSound はバッファへのポインタを 2 つ保持している。再生カーソルと書き込みカーソルである。これらの位置はバッファのバイト オフセットであり、メモリの絶対アドレスではない。
DirectSoundSecondaryBuffer8.Play メソッドは、常にバッファの再生カーソルの位置から再生を開始する。バッファを作成した時点で、カーソル位置は 0 に設定される。サウンドが再生されるにつれ、カーソル位置は移動し、次に出力されるデータ バイトを示す。バッファが停止したときは、カーソルは次のデータ バイトにとどまる。
バッファの書き込みカーソルより後の場所には、データを安全に書き込める。カレント プレイ ポジションとカレント ライト ポジションの間にあるブロックは、既に再生が確定していて、安全に変更することはできない。
バッファを時計の文字盤で表し、時計回りの方向にデータを書き込むと考える。再生位置と書き込み位置は、この文字盤上で同じ速度で回転する 2 本の針にたとえられ、書き込み位置は、常に再生位置の少し前方にある。再生位置が 1 を示し、書き込み位置が 2 を示している場合は、データを書き込んでも安全なのは 2 の後だけである。1 と 2 の間のデータは DirectSound が既に再生キューに入れている可能性もあるので、変更すべきではない。
書き込み位置は、バッファに書き込まれたデータではなく再生位置に合わせて移動する。データをストリーミングする場合、次に書き込みを行うデータ ブロックの位置を示すために、開発者は独自のポインタを維持する責任を負う。
アプリケーションは、DirectSoundSecondaryBuffer8.GetCurrentPosition メソッドを呼び出すことにより、再生カーソルと書き込みカーソルを取得できる。DirectSoundSecondaryBuffer8.SetCurrentPosition メソッドによって、再生カーソルを移動できる。アプリケーションは、書き込みカーソルの位置を制御しない。
再生カーソルをできるだけ正確に報告するには、セカンダリ バッファを作成する際に DSBCAPS_GETCURRENTPOSITION2 フラグを指定しなければならない。詳細については、「DSBUFFERDESC」を参照すること。