2

openal で再生中のソースの現在の位置を取得するにはどうすればよいですか? つまり、オーディオのどの位置が、バッファ、openal のバッファ、ハードウェア バッファなどを通過した後、ハードウェアで現在再生されているかということです。

API を簡単に見てみましたが、AL_SAMPLE_OFFSET/AL_BYTE_OFFSET/AL_SEC_OFFSET が何を表しているのかよくわかりません。ストリーミング ソースを再生している場合、数値が常に増加しているようには見えません。おそらく、現在の再生バッファー内の位置を取得しているように見えますか? (またはすべてのバッファの?)

たとえば、再生中に次のコードをループして実行します。

alGetSourcef( sources[0], AL_SAMPLE_OFFSET, &secoffset );
printf(" - %f samples\n", secoffset);

そして得る

 - 0.000000 samples
 - 8192.000000 samples
 - 9216.000000 samples
 - 5632.000000 samples

増えていないようです。

これは、最新の xcode 4.3 を搭載した macos 10.7 にありますが、他のプラットフォームでも同様であると想定しています。

アップデート:

私はバッファサイズを増やしてみましたが、実際には現在再生中のバッファ内の唯一の現在の位置のように見えます:

 - 0.000000 bytes
 - 18432.000000 bytes
 - 20480.000000 bytes
 - 36864.000000 bytes
 - 36864.000000 bytes
 - 55296.000000 bytes
 - 55296.000000 bytes
 - 73728.000000 bytes
refilling buffer 2408
re-queued buffer 2408
 - 16384.000000 bytes
 - 34816.000000 bytes
 - 34816.000000 bytes
 - 51200.000000 bytes
 - 51200.000000 bytes
 - 69632.000000 bytes
refilling buffer 2409
re-queued buffer 2409

それを考えると、複数の異なるバッファを介してオープンプレイを追跡する適切な方法はありますか?

4

1 に答える 1

2

これらのオフセットは、キューに入れられたバッファーの先頭からのものです。すでにキューに入れられていないバッファのサイズを手動でカウントし、この数に追加する必要があります。

ここで、ドキュメントを読むと、 40ページに次のように書かれています。

位置は、ソースのすべてのキューに入れられたバッファーの先頭を基準にしており、set呼び出しによってトラバースされたキューに入れられたバッファーはすべて処理済みとしてマークされます。

于 2012-04-15T17:44:52.583 に答える