2016-10-17 16 views
0

IDirectSoundBufferGetCurrentPosition方法は、2つの引数を有する:FMODには、DirectSoundのIDirectSoundBuffer :: GetCurrentPositionのpdwCurrentWriteCursor引数に相当するものがありますか?

HRESULT GetCurrentPosition(LPDWORD pdwCurrentPlayCursor, LPDWORD pdwCurrentWriteCursor); 

最初の引数「pdwCurrentPlayCursorは」プレイカーソルを受信し、第二の引数「pdwCurrentWriteCursor」が後にサウンドバッファ内の位置を示す書き込みカーソルを受信しますデータを書き込むことは安全です - 再生カーソルで始まり、書き込みカーソルで終わる領域(おそらくバッファの終わりを包んでいる)には、サウンドハードウェアにコミットされていてまだ再生されていないデータが含まれている可能性があります。

FMODが提供する最も近い同等の方法は、FMODのgetPosition方法であると思わ::チャンネル:

FMOD_RESULT F_API getPosition(unsigned int *position, FMOD_TIMEUNIT postype); 

この方法は、プレイカーソルを受信するために、引数「位置」を持っていませんが、受信するための引数カーソルを書く。

FMODは、IDirectSoundBuffer :: GetCurrentPositionのpdwCurrentWriteCursor引数と同じ目的を果たす引数を持つ関数を提供しますか?または、FMODを使用しているときに安全な書き込みカーソルを取得する唯一の方法は、固定オフセットを追加することです(DirectSoundドキュメントでは、再生カーソルと書き込みカーソルの間隔は約15ミリ秒です)。

答えて

0

DirectSoundは、かなり古い学校である「リングバッファ」提出モデルを使用します。 XAudio2、FMOD、その他の現代的なサウンドAPIは、代わりに「パケットベースの」送信を使用します。このモデルでは、再生するオーディオのバッファをキューに入れておき、再生が終了する前に各バッファとして処理します。

パケットベースの送信では、「再生カーソル」は意味を持ちますが、「書き込みカーソル」はありません。

関連する問題