5

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

我只是想获得社区对此的意见,任何链接和示例项目将不胜感激。

4

4 回答 4

3

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

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

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

于 2011-02-15T23:10:28.283 回答
2

这可能并不能真正回答您的问题,但是您看过Finch吗?仅查看源代码可能会提供一些指示。

  • 约翰内斯
于 2011-02-15T19:56:53.943 回答
1

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

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

以下是 OpenAL 和 AVAudioPlayer 之间优缺点的简要说明:http: //kstenerud.github.com/ObjectAL-for-iPhone/documentation/index.html#choosing_sec

于 2011-02-16T15:37:52.360 回答
0

我最终为此使用了 Cocos2D 的音频库,它的性能比我预期的要好得多。AVAudioPlayer 最终比我需要的要低一些。

于 2016-07-25T21:24:29.410 回答