适用于iPhone的实时音频循环切换

时间:2011-02-15 19:43:05

标签: iphone core-audio openal audiounit

我正在尝试找到播放无缝音频循环的最佳方式,用户可以在尽可能短的时间内切换到另一个音频,并提供相当数量(30-150)的非常短的循环。 OpenAL是否足以满足这一要求,还是需要深入研究音频单元? Apple文档说,对于像仪器这样的实时反馈,Audio Units是正确的选择。

我只想获得社群对此的意见,我们将非常感谢任何链接和示例项目。

4 个答案:

答案 0 :(得分:3)

您可以使用AVAudioPlayer无缝循环压缩音频文件(numberOfLoops = -1)。我建议使用IMA4编码的CAF文件,因为传闻这些文件可以从硬件解压缩中获益(为其他东西节省CPU周期)。

要保持文件大小不变,可以降低比特率(尝试96 kbps)和/或使用单声道。

请注意,AVAudioPlayer不允许您更改播放的速度或频率。

答案 1 :(得分:2)

这可能并没有真正回答你的问题,但你有没有看过Finch? 只是查看源代码可能会提供一些指示。

  • 约翰内斯

答案 2 :(得分:1)

如果您需要能够在没有播放延迟的情况下切换到另一个音频样本,则需要使用OpenAL。 AVAudioPlayer在开始播放之前有一段延迟。

您可以通过调用prepareToPlay来最小化该延迟,但它并不总是完全消除延迟。同样,如果您有30到150个样本供用户选择进行播放,您将无法预先知道哪些样本需要预先加载。

以下是OpenAL和AVAudioPlayer之间利弊的概述:http://kstenerud.github.com/ObjectAL-for-iPhone/documentation/index.html#choosing_sec

答案 3 :(得分:0)

我最终使用了Cocos2D的音频库,它的性能远远超出我的预期。 AVAudioPlayer最终比我需要的更低级别。