哪个API可以从ios和osx中的缓冲区播放音频?

时间:2012-02-04 17:09:11

标签: ios macos audio core-audio openal

我想这样做非常简单:从内存播放PCM音频数据。

音频样本将来自声音合成算法,预加载的样本文件或其他任何内容。我的问题是关于如何播放缓冲区,而不是如何填充数据。

所以我正在寻找重新实现旧的,已弃用的 AudioWrapper (基于AudioUnits V1)的最佳方式,但我在{{3}中找不到一个能满足以下要求的API:

  • 与10.5至10.7兼容。
  • 适用于ios。
  • 不依赖第三方库。
  • 是未来证明(例如:不基于Carbon,64位......)。

我考虑使用OpenAL,但它真的是最好的选择吗?我已经看过Apple Documentation,它可能过于复杂和过度,可能会增加性能开销?

更糟糕的是,我可以有两个不同的 AudioWrapper 实现,但如果可能的话,我真的想避免为每个系统安装一个版本(ios,10.5,10.6,10.7) ...)。此外,它将使用C ++。

编辑:我需要一个良好的延迟,系统必须在20毫秒内响应用户交互(缓冲区必须介于128到512个样本之间,44KHz)

2 个答案:

答案 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)采样率。