确定何时播放缓冲区而不在 OpenAL 中轮询源
Posted
技术标签:
【中文标题】确定何时播放缓冲区而不在 OpenAL 中轮询源【英文标题】:Determine when a buffer has been played without polling the source in OpenAL 【发布时间】:2011-04-04 21:05:01 【问题描述】:这甚至可能吗?如果我设法在每次处理缓冲区时调用一个函数,那将是非常酷的。除了投票来源之外的任何其他想法都受到欢迎:D
【问题讨论】:
您的意思是轮询源吗? +1 确实如此,抱歉,我已经编辑了问题 这里有类似的东西:***.com/questions/1046315/… 还有这个,似乎拒绝了:opensource.creative.com/pipermail/openal/2009-April/011616.html 是的,我认为这是不可能的,但我仍然想知道,与轮询相比,它在资源方面是否明智? 【参考方案1】:您知道每个缓冲区中有多少样本,并且您知道源播放的采样率。这应该可以让您很好地了解源何时完成对缓冲区的处理。
如果您感觉非常无畏,您可以将其破解到 OpenAL-soft 源代码中。从代码的外观来看,您可以将更改放入文件末尾的mixer.c
,靠近MixSource()
函数的末尾。
当然要记住,OpenAL-soft 是 lGPL;因此您需要发布/提供您对库本身所做的任何更改。
如果您无法使用预包含的库,那么您将没有太多选择。 OpenAL 拒绝回调函数的想法。
【讨论】:
我想我明白你在说什么 JCooper,但是,我不知道我是否可以触及 OpenAL (ios) 的这个实现。如果可以的话,只要实际处理依赖于处理器,知道每个缓冲区上的采样率和样本数对我有帮助吗? (可能需要更多或更少)。 我怀疑你可以改变 OpenAL 的 iOS 版本,但我认为你可以让它使用 OpenAL-soft 作为插件,或其他东西。我不确定您对其余评论的意思。处理声音缓冲区所花费的时间长度应该或多或少与处理器无关。 我选择你的答案是因为即使对于 iOS 不起作用(我最终轮询源),也许它可以帮助其他在不同平台上工作的人!谢谢!以上是关于确定何时播放缓冲区而不在 OpenAL 中轮询源的主要内容,如果未能解决你的问题,请参考以下文章