我正在开发一种适用于 iOS 的数字音频工作站架构(主要是,但也尝试支持 OS X)。我正在慢慢浏览 Apple 的数英里文档和他们的框架引用。
我有 DSP 方面的经验,但 iOS 对我来说比较新,而且有很多对象、教程(即使是旧版本的 iOS)和具有不同 API 的不同框架。 我只想确保在开始时选择正确的选项,或两者的组合。
架构的目标是:
- 音轨样本访问(访问文件中的样本)
- iPod 库歌曲
- 本地文件歌曲
- 远程服务器上的歌曲
- 广播电台(无限长的歌曲)
- 效果链接(多个均衡器,或同时改变音高和速度)
- 多 channel 和混音(甚至环绕)
- 便携性
- 至少 Mac OS X
- iOS 6+ 支持(不需要 iOS 5 或更低版本)
- 32 位 float ,非带符号整数的示例访问。
- 简单的 Objective-C API(DSP 和处理当然是用 C++ 完成的)
- 录音、播放
- 录制到文件(可选择编解码器),或通过网络发送 (VoIP)
- 在不同的输出(在 Mac 上)或在 iOS 上的扬声器/耳机上播放
- 改变音量/静音
- 背景音频支持
- 实时样本处理
- 多线程
我希望我没有错过任何东西,但这些是最重要的目标。
我的研究
我已经浏览了大多数框架(虽然不是很详细),这就是我的发现。 Apple 列出了以下在 iOS 上使用音频的框架:
- 媒体播放器框架
- AV 基础框架
- 音频工具箱框架
- 音频单元框架
- OpenAL 框架
Media Player 和 AV Foundation 的 API 级别太高,不允许直接访问示例。另一端的 OpenAL 无法录制音频。这样就剩下 Audio Toolbox 和 Audio Unit 框架了。此处解释了许多差异:What's the difference between all these audio frameworks?
据我所知,Audio Toolbox 将是可行的方法,因为目前不需要 MIDI。但是Audio Toolbox上的信息和教程很少,可以进行更专业的控制,例如录音,播放等。但Audio Units的信息和教程要多得多。
我的第一个问题: 究竟什么是音频队列服务,它们属于什么框架?
然后是最后一个问题:
应该使用哪个框架来实现大部分预期目标?
您甚至可以建议混合和匹配框架、类,但我请您解释一下您的答案以及您将使用哪些类来更详细地实现目标。我鼓励尽可能使用最高级别的 API,但要实现目标所需的最低级别。也欢迎使用示例代码链接。
非常感谢您的帮助。
Best Answer-推荐答案 strong>
Audio Units 是最低级别的 iOS 音频 API,也是构建音频队列的 API。音频单元将为应用程序提供最低延迟,因此最接近实时处理。不过它是一个 C API,因此应用程序可能必须自己进行一些音频内存管理。
AVFoundation 框架可以让应用更轻松地访问音乐库 Assets 。
一个应用只能处理来自其他明确发布其音频数据的应用的声音,其中不包括音乐播放器应用,但确实包括一些使用 Apple 的 Inter-App Audio API 和第 3 方 Audiobus API 的应用。
关于ios - iOS 上的数字音频工作站架构,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/17174447/
|