哪个API在ios和osx中从缓冲区播放音频



我想做一件非常简单的事情:从内存中播放PCM音频数据。

音频样本将来自声音合成算法、预加载的样本文件或其他任何东西。我的问题实际上是关于如何发挥缓冲区,而不是如何用数据填充它们。

因此,我正在寻找最好的方法来重新实现我的旧的、不推荐使用的AudioWrapper(它基于AudioUnits V1),但我在Apple文档中找不到满足以下要求的API:

  • 与10.5到10.7兼容
  • 在ios中可用
  • 不依赖于第三方库
  • 经得起未来考验(例如:不基于碳,64位…)

我正在考虑使用OpenAL,但它真的是最好的选择吗?我看到过关于它的负面意见,它可能过于复杂和过于夸张,并且可能会增加性能开销?

更糟糕的是,我可能有两个不同的AudioWrapper实现,但如果可能的话,我真的希望避免每个系统都有一个版本(ios,10.5,10.6,10.7…)。此外,它将在C++中。

编辑:我需要一个良好的延迟,系统必须在20ms以下对用户交互做出响应(缓冲区必须在44KHz下的128到512个样本之间)

AudioQueues非常常见。然而,它们的I/O缓冲区大小足够大,不适合交互式I/O(例如合成器)。

为了降低延迟,请尝试AudioUnits——MixerHost示例可能是一个很好的起点。

不确定OS X 10.5,但我直接使用Audio Units API在OS X 10.6、10.7和iOS 3.X到5.X上进行低延迟音频分析和合成。我推广API的包装文件只有几百行纯C,并带有一些ifdef。

音频队列的延迟对于我在iOS上的低延迟来说太高了,而iOS RemoteIO音频单元似乎允许以44100采样率的缓冲区短至256个样本(但有时在显示器关闭时仅降至1024个)。

最新更新