openal:获取源的当前播放位置
Posted
技术标签:
【中文标题】openal:获取源的当前播放位置【英文标题】:openal: Get the current playing position of a source 【发布时间】:2012-04-15 07:54:55 【问题描述】:你如何在 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
那么考虑到这一点,是否有一种体面的方法来跟踪公开赛通过多个不同的缓冲区?
【问题讨论】:
【参考方案1】:这些偏移量来自排队缓冲区的开头。您需要手动计算已经未排队的缓冲区的大小并添加到此数字。
在这里,如果您阅读documentation,它在第 40 页上说:
位置相对于所有排队缓冲区的开头 对于源,集合调用遍历的任何排队缓冲区都将是 标记为已处理。
【讨论】:
以上是关于openal:获取源的当前播放位置的主要内容,如果未能解决你的问题,请参考以下文章