2012-04-15 62 views
1

如何获取openal中播放源的当前位置?我想我的意思是,在硬件通过缓冲区,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 

这似乎并没有增加。

这是macos 10.7与最新的xcode 4.3,但我假设它应该在其他平台上类似。

更新:

我已经尝试增加缓冲区大小,它实际上看起来像它只是在当前播放的缓冲当前位置:所以考虑到

- 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 

,有没有一个像样的通过多种不同的缓冲区保持跟踪的开路方式?

回答

1

这些偏移量来自排队缓冲区的开始。您需要手动计算已排列的缓冲区的大小并添加到此数字。

在这里,如果你读了documentation,它说,第40页:

的位置是相对于所有的源排队缓冲区 的开始,任何排队的一组呼叫穿越缓冲区将 标记为已处理。

+0

谢谢。直到后来我才看过规范(我认为编程指南就足够了)。 – 2012-04-18 02:39:48