iOS Audio unit(音频单元)详解 关于音频单元托管
iOS 提供的音频处理插件支持混合,均衡,格式转换以及录制,回放,离线呈现和实时对话(如VoIP(互联网语音协议))的实时输入/输出。您可以从 ios 应用程序动态加载并使用 - 即 主机 - 这些强大且灵活的插件(称为 音频单元)。
音频单元通常在称为音频处理图的封闭对象的上下文中工作 ,如图所示。在本例中,您的应用通过一个或多个回调函数向音频图表中的第一个音频单元发送音频,并对每个音频单元进行单独控制。I / O单元的输出 - 这个或任何音频处理图形中的最后一个音频单元 - 直接连接到输出硬件。
乍看上去
由于音频单元构成iOS音频堆栈中最低的编程层,因此要有效使用它们需要比您需要其他iOS音频技术更深的理解。除非您需要实时播放合成声音,低延迟I / O(输入和输出)或特定音频单元功能,否则请首先查看媒体播放器,AV Foundation,OpenAL或Audio Toolbox框架。这些更高级别的技术以您的名义使用音频单元,并提供重要的附加功能,如“ 多媒体编程指南”中所述。
音频单元提供快速的模块化音频处理
直接使用音频单元的两大优点是:
- 卓越的响应能力。因为您可以访问音频单元渲染回调函数中的实时优先级线程,所以您的音频代码尽可能接近金属。合成乐器和实时同步语音I / O直接使用音频单元最有利。
- 动态重新配置。以
AUGraph
不透明类型为基础构建的音频处理图形API 可让您以线程安全的方式动态组合,重新配置和重新排列复杂的音频处理链,而这一切都是在处理音频时完成的。这是iOS中唯一提供此功能的音频API。
音频单元的生命周期如下进行:
- 在运行时,获取对动态链接库的引用,该库定义要使用的音频单元。
- 实例化音频单元。
- 根据需要配置音频单元,以适应您应用的意图。
- 初始化音频单元以准备处理音频。
- 开始音频流。
- 控制音频单元。
- 完成后,取消分配音频单元。
音频单元提供非常有用的单个功能,如立体声声像,混音,音量控制和音频电平测量。托管音频单元可让您将这些功能添加到您的应用中。但是,要获得这些好处,您必须获得一系列基本概念,包括音频数据流格式,呈现回调函数和音频单元架构。
相关章节: 音频单元托管基础
选择设计模式并构建您的应用程序
托管设计模式的音频单元提供了灵活的蓝图,可根据您的应用的具体情况进行自定义。每种模式都表示:
- 如何配置I / O单元。I / O单元有两个独立的元件,一个接受来自输入硬件的音频,一个将音频发送到输出硬件。每个设计模式都指示您应该启用哪个或哪些元素。
- 在音频处理图表中,您必须指定音频数据流格式。您必须正确指定支持音频流的格式。
- 在哪里建立音频单元连接以及附加渲染回调函数的位置。音频单元连接是一种正式的结构,其将流格式从一个音频单元的输出传播到另一个音频单元的输入。渲染回调使您可以将音频馈送到图形中,或者在图形中的单个样本级别处理音频。
无论您选择哪种设计模式,构建音频单元托管应用程序的步骤基本相同:
- 配置您的应用程序音频会话,以确保您的应用程序在系统和设备硬件环境中正常工作。
- 构建音频处理图。这个多步骤过程利用您在音频单元托管基础知识中学到的所有 知识。
- 提供用于控制图形音频单元的用户界面。
熟悉这些步骤,以便将它们应用于自己的项目。
相关章节: 构建音频单元应用程序
充分利用每个音频单元
本文档的大部分内容都告诉你,所有的iOS音频设备都有共同的重要属性。例如,这些属性包括您的应用程序需要在运行时指定和加载音频单元,然后正确指定其音频流格式。
同时,每个音频单元都有一些独特的功能和要求,从正确的音频采样数据类型到使用,到正确行为所需的配置。了解每个音频设备的使用细节和特定功能,以便了解何时使用3D混音器设备以及何时使用多声道混音器。
相关章节: 使用特定的音频单元
如何使用此文档
如果您希望先从 iOS开发的音频单元开始,请下载iOS开发人员中心提供的示例应用程序之一,例如 音频混音器(MixerHost)。回到本文档回答您可能遇到的问题并了解更多信息。
如果您在开始项目之前需要坚实的概念基础,请首先阅读 音频单元托管基础知识 。本章解释API背后的概念。继续 构建音频单元应用程序 ,了解为项目选择设计模式以及构建应用程序的工作流程。
如果您有一些音频单元的使用经验,并且只需要特定的类型,那么您可以从 使用特定的音频单元开始。
先决条件
在阅读本文之前,这是一个好主意,阅读部分 一些关于数字音频和线性PCM 的 核心音频概述。另外,请查看 Core Audio词汇表, 了解您可能不熟悉的术语。要检查是否可以通过更高级别的技术满足您的音频需求,请查看 在 多媒体编程指南中使用音频。