Audio Unit 介绍

关于 Audio Unit

iOS 提供了音频处理插件,支持混音,声音均衡,格式转化,以及用于录音,回放,离线渲染,实时对话的输入输出。能够动态载入和使用这些强大而灵活的插件,在 iOS 应用中这些插件被称为 audio units。html

Audio units 一般在被称为 audio processing graph 的封闭对象的上下文中进行工做,如图所示,应用程序经过一个或者多个回调函数将音频发送到 graph 中的第一个音频单元,并对每个音频单元进行单独控制。在 I/O unit 的输出(audio processing graph 中最后一个 audio unit)直接链接到输出硬件。编程

初识 Audio Unit

因为 audio units 构成了 iOS 音频堆栈中最低层的编程层,想要高效的使用它们须要比其它音频技术有更深刻的了解。除非须要实时播放合成声音,低延迟输入输出,或者特定的 audio unit 功能,不然优先使用 Media Player,AV Foundation,OpenAL 或 AudioToolbox 框架。设计模式

Audio Units 提供更快,模块化音频处理方案

直接使用 audio units 有两大优势:session

  • 出色的响应能力。由于你能够访问 audio unit 中的实时优先级线程呈现回调函数,因此你的代码会尽量接近 metal。合成乐器和实时同步语音输入输入可以最大收益于直接使用 audio units。
  • 动态配置。以 AUGraph 为基础构建的 audio processing graph API,让你可以动态组合,从新配置和从新排列复杂的音频处理链。这是 iOS 中惟一提供此功能的 API。

一个 audio unit 的生命周期以下:架构

  1. 在运行时,获取一个对动态连接库的引用,该库定义了你想要使用的 audio unit。
  2. 实例化 audio unit。
  3. 根据应用须要配置 audio unit。
  4. 初始化 audio unit 以准备处理音频。
  5. 开始音频流。
  6. 控制 audio unit。
  7. 完成后,销毁 audio unit。

Audio units 提供了很是有用的功能,例如立体声声相,混音,音量控制,音频电平测量。添加 audio units 到你的应用中,你必须掌握一些列基本概念,例如音频数据流格式,呈现回调函数和音频单元架构。app

选择设计模式和构建应用程序

  • 如何配置 I/O unit。I/O unit 有两个独立的 elements,一个从输入硬件接收音频,一个发送音频到输出硬件。每一种设计模式必须指示该启用的 element。
  • 在 audio processing graph 中,你必须正确指定音频流支持数据流格式。
  • 在哪创建 audio unit 链接,在哪附加回调函数。 audio unit 链接是从一个 audio unit 的输出,到另外一个 audio unit 的输入流格式的正式构造。回调函数让你将音频数据输入到 graph 中,或者在 graph 中的单个样本级别操纵音频。

不管你选择哪一种设计模式,构建 audio unit 应用程序的基本步骤是相同的:框架

  • 配置应用的 audio session,确保你的应用可以股在系统和设备硬件上下文中正常工做。
  • 构建 audio processing graph。
  • 提供一个用户交互控制图像音频单元。

充分利用每个 Audio Unit

大部分文档都告诉你全部的iOS audio units 都有重要的共同属性。例如程序须要在运行时指定和加载 audio unit,而后正确指定音频流格式。
同时,每个 audio unit 具备某些独特的特性和要求,从正确的音频样本数据类型到如何使用,到所须要的正确配置。了解每个 audio unit 的细节和特定功能,例如如何使用 3D mixer unit,如何使用 Multichannel Mixer。ide

如何使用文档

若是你但愿快速应用 audio unit,能够下载参考代码,如遇到问题,查阅文档。若是你想开始项目前,对 audio unit 有一个较好的基础,能够先详细阅读基础文档,而后选择设计模式,构建本身的应用。若是对开发 audio units 有必定的经验,仅想使用指定的类型,参考 Using Specific Audio Units.模块化

相关文章
相关标签/搜索