我正在开发一种适用于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,但要实现目标所需的最低级别。也欢迎使用示例代码链接。
非常感谢您的帮助。