2

我正在开发一种适用于iOS的数字音频工作站架构(主要是,但也试图支持 OS X)。我正在慢慢浏览 Apple 提供的数英里文档和他们框架的参考资料。

我有使用 DSP 的经验,但 iOS 对我来说比较新,并且有很多对象、教程(甚至是旧版本的 iOS)和具有不同 API 的不同框架。我只是想确保在开始时选择正确的,或两者的组合。

该架构的目标是:

  • 音轨样本访问(访问文件中的样本)
    • iPod 库歌曲
    • 本地文件歌曲
    • 远程服务器上的歌曲
    • 广播电台(无限长的歌曲)
  • 效果链(多个均衡器,或同时改变音高和速度)
  • 多通道和混音(甚至环绕)
  • 可移植性
    • 至少 Mac OS X
    • iOS 6+ 支持(不需要 iOS 5 或更低版本)
    • 32 位浮点数的示例访问,而不是有符号整数。
  • 简单的 Objective-C API(DSP 和处理当然用 C++ 完成)
  • 录音、播放
    • 记录到文件(选择编解码器),或通过网络发送(VoIP)
    • 在不同的输出(在 Mac 上)或在 iOS 上的扬声器/耳机上播放
    • 改变音量/静音
    • 背景音频支持
  • 实时样品处理
    • 当前播放的任何歌曲的均衡器
    • 实时样本操作
  • 多线程

我希望我没有错过任何东西,但这些是最重要的目标。

我的研究

我已经浏览了大多数框架(虽然没有那么详细),这就是我的发现。Apple 列出了以下在 iOS 上使用音频的框架:

  • 媒体播放器框架
  • AV 基础框架
  • 音频工具箱框架
  • 音频单元框架
  • OpenAL 框架

Media Player 和 AV Foundation 的 API 级别太高,不允许直接访问示例。另一端的 OpenAL 无法录制音频。这样就剩下 Audio Toolbox 和 Audio Unit 框架了。此处解释了许多差异:所有这些音频框架之间有什么区别?

据我所知,Audio Toolbox 将是可行的方法,因为目前不需要 MIDI。但是Audio Toolbox上的信息和教程很少,可以进行更专业的控制,例如录音,播放等。但Audio Units还有更多。

我的第一个问题: 音频队列服务到底是什么,它们属于什么框架?

然后是最后一个问题:

应该使用哪个框架来实现大部分预期目标?

您甚至可以建议混合和匹配框架、类,但我请您解释您的答案以及您将使用哪些类来更详细地实现目标。我鼓励尽可能使用最高级别的 API,但要实现目标所需的最低级别。也欢迎使用示例代码链接。

非常感谢您的帮助。

4

1 回答 1

4

Audio Units 是最低级别的 iOS 音频 API,也是构建音频队列的 API。音频单元将为应用程序提供最低延迟,因此最接近实时处理。不过它是一个 C API,因此应用程序可能必须自己进行一些音频内存管理。

AVFoundation 框架可以为应用程序提供更容易访问音乐库资产的方式。

一个应用程序只能处理来自其他明确发布其音频数据的应用程序的声音,其中不包括音乐播放器应用程序,但确实包括一些使用 Apple 的应用程序间音频 API 和第 3 方音频总线 API 的应用程序。

于 2013-06-18T21:04:51.563 回答