确定何时播放缓冲区而不在 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 中轮询源的主要内容,如果未能解决你的问题,请参考以下文章

iOS:Pitch Shifting & Piping 从 OpenAL 输出到缓冲区

OpenAL 从特定时间戳播放音频

从视频文件中提取音频并在 OpenAL 中播放

在python中轮询键盘(检测按键)

在c#中轮询一个url

在windows中轮询CTS线路的状态