关于 Audio Unit

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

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 有两大优点:

  • 出色的响应能力。因为你可以访问 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 到你的应用中,你必须掌握一些列基本概念,例如音频数据流格式,呈现回调函数和音频单元架构。

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

  • 如何配置 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。

如何使用文档

如果你希望快速应用 audio unit,可以下载参考代码,如遇到问题,查阅文档。如果你想开始项目前,对 audio unit 有一个较好的基础,可以先详细阅读基础文档,然后选择设计模式,构建自己的应用。如果对开发 audio units 有一定的经验,仅想使用指定的类型,参考 Using Specific Audio Units.

Audio Unit 介绍的更多相关文章

  1. iOS 实时音频采集与播放Audio Unit使用

    前言 在iOS中有很多方法可以进行音视频采集.如 AVCaptureDevice, AudioQueue以及Audio Unit.其中 Audio Unit是最底层的接口,它的优点是功能强大,延迟低; ...

  2. 音频单元组件服务参考(Audio Unit Component Services Reference)

    目录 了解Audio Unit体系结构 文档结构预览 结构单元介绍 本文主要介绍AudioUnit的组成 本文由自己理解而成,如有错误,请欢迎网友们指出校正. 了解Audio Unit体系结构 开始前 ...

  3. Audio Unit 基础

    如图所示,所有 iOS 音频技术都是基于 audio units.此处显示的更高级别的技术,如 Media Player,AV Foundation,OpenAL,AudioToolbox,是对 au ...

  4. linux任务计划 chkconfig工具 systemd管理服务 unit介绍 target介绍

    linux任务计划 任务计划:特定时间备份数据,重启服务,shell脚本,单独的命令等等. 任务计划配置文件:cat /etc/crontab [root@centos7 ~]# cat /etc/c ...

  5. IOS音频架构之Audio Unit

    在前面的章节部分我们已经对IOS音频结构有了一个清晰的认识,知道Audio Unit是位于整个音频结构的最底层,这一层非常多API已经開始和硬件打交道了.所以比較复杂,有了前面的基础再来看这个部分就比 ...

  6. Linux centos7 linux任务计划cron、chkconfig工具、systemd管理服务、unit介绍、 target介绍

    一.linux任务计划cron crontab -u  -e -l -r 格式;分 时 日 月 周 user command 文件/var/spool/corn/username 分范围0-59,时范 ...

  7. Web Audio初步介绍和实践

    Web Audio还是一个比较新的JavaScript API,它和HTML5中的<audio>是不同的,简单来说,<audio>标签是为了能在网页中嵌入音频文件,和播放器一样 ...

  8. Android系统Audio框架介绍【转】

    本文转载自:https://blog.csdn.net/yangwen123/article/details/39502689 音频基础知识声音有哪些重要属性呢? 响度(Loudness)响度就是人类 ...

  9. linux任务计划cron、chkconfig工具、systemd管理服务、unit和target介绍

    第8周第1次课(5月14日) 课程内容: 10.23 linux任务计划cron10.24 chkconfig工具10.25 systemd管理服务10.26 unit介绍10.27 target介绍 ...

随机推荐

  1. cordforce Educational Codeforces Round 47 补题笔记 <未完>

    题目链接 http://codeforces.com/contest/1009 A. Game Shopping 直接模拟即可,用了一个队列来存储账单 #include <iostream> ...

  2. JSONArray.fromObject不执行且不报错问题的解决

    今天在写javaweb工程的时候需要向前台传json格式的数据,用到了json-lib-2.4-jdk15.jar等一系列包,然而却出现如下状况: CityBean是一个javaBean,我们看到,控 ...

  3. Yii2实现跨mysql数据库关联查询排序功能

    遇到一个项目,需要跨表网上找了很多的资料,整理一下,方便以后再次使用 背景:在一个mysql服务器上(注意:两个数据库必须在同一个mysql服务器上)有两个数据库: memory (存储常规数据表) ...

  4. stat.h头文件,轻松获取文件属性

    [以前还为了获取文件的长度,费劲从头读取一遍,一个一个字节的算. 做webserver时候,发现原来stat函数可以返回一个结构,里面包括文件的全部属性. 真是曲折啊.] #i nclude<s ...

  5. C语言结构体篇 结构体

    在描述一个物体的属性的时候,单一的变量类型是无法完全描述完全的.所以有了灵活的结构体变量. 结构体变量从意义上来讲是不同数据类型的组合,从内存上来讲是在一个空间内进行不同的大小划分. 1.1 结构体类 ...

  6. CONDENSE命令により、文字列から冗長スペースが削除

    CONDENSE 命令により.文字列から冗長スペースが削除されます. CONDENSE c [NO-GAPS]. この命令により.項目 c に先行空白が含まれる場合は削除され.その他の空白列がある場合 ...

  7. Android面试收集录8 HandlerThread详解

    1.前言 我们知道在Android系统中,我们执行完耗时操作都要另外开启子线程来执行,执行完线程以后线程会自动销毁. 想象一下如果我们在项目中经常要执行耗时操作,如果经常要开启线程,接着又销毁线程, ...

  8. PHP代码审计1-审计环境与调试函数

    审计环境与调试函数 审计环境 测试环境 常用集成环境:phpStudy.WampServer #不同的操作系统下,漏洞测试的结果也可能不一样 PHP编写工具 EditPlu Notepad++ 代码审 ...

  9. notepad++ 换行技巧 log换行

    有时候,服务器收集上来的日志,格式很乱,看log很难,如下: java.lang.IllegalStateException: BEvent.init() must be call first\n\t ...

  10. RandomAecessFile open failed: EISDIR (Is a directory)

    今天下午搞断点续传,下载文件的时候,弄了一下,我把下载的文件命名为plug.jar.后来老是报错: open failed: EISDIR (Is a directory) 我烦了,两个小时啊,我操. ...