我想这样做非常简单:从内存播放PCM音频数据。
音频样本将来自声音合成算法,预加载的样本文件或其他任何内容。我的问题是关于如何播放缓冲区,而不是如何填充数据。
所以我正在寻找重新实现旧的,已弃用的 AudioWrapper (基于AudioUnits V1)的最佳方式,但我在{{3}中找不到一个能满足以下要求的API:
我考虑使用OpenAL,但它真的是最好的选择吗?我已经看过Apple Documentation,它可能过于复杂和过度,可能会增加性能开销?
更糟糕的是,我可以有两个不同的 AudioWrapper 实现,但如果可能的话,我真的想避免为每个系统安装一个版本(ios,10.5,10.6,10.7) ...)。此外,它将使用C ++。
编辑:我需要一个良好的延迟,系统必须在20毫秒内响应用户交互(缓冲区必须介于128到512个样本之间,44KHz)
答案 0 :(得分:3)
AudioQueues很常见。但是,它们的I / O缓冲区大小足以使它们不适合交互式I / O(例如合成器)。
为了降低延迟,请尝试使用AudioUnits - MixerHost示例可能是一个很好的起点。
答案 1 :(得分:1)
不确定OS X 10.5,但我直接在OS X 10.6,10.7和iOS 3.x至5.x上使用Audio Units API进行低延迟音频分析和综合。我推广API的包装器文件只有几百行普通C,只有几个ifdef。
对于iOS上的低延迟内容,音频队列的延迟太高,而iOS RemoteIO音频单元似乎允许缓冲区短至256个样本(但有时在显示器关闭时仅降至1024)采样率。