2

您如何获得公开赛中播放源的当前位置?我想我的意思是,在音频经过您的缓冲区、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 回答