Audio Unit 学习笔记 | 基础

iOS音频播放(三)AudioUnit介绍与实战 混响效果器:子类型是kAudioUnitSubType_Reverb2,对于人声处理来讲这是非常重要的效果器,可以想象自己身处在一个空房子中,如果有非常多的反射声和原始声叠加在一起,那么从听感上可能会更有震撼力,但是同时原始声音也会变得更加模糊,原始声音的细节会被遮盖住,所以混响的设置的大小对于不同的人来讲会很不一致,可以根据自己的喜好来进行设置。苹果官方文档中描述,AudioUnit提供了音频快速的模块化处理,如果是在以下场景中,更适合使用AudioUnit而不是使用高层次的音频框架。 阅读详情

Audio Unit 学习笔记 | 基础

概述

iOS系统对音频处理做了三层封装,包括应用层、服务层和硬件层。如下图所示:

Audio Unit 位于服务层,几乎可以认为是对硬件驱动层的封装。Audio Unit 提供了更快、模块化的音频处理,同时提供了强大的个性化功能,如立体声声像、混音、音量控制和音频电平测量。如果想充分使用它的功能,必须深入了解包括音频数据流格式、回调函数和音频单元架构等基础知识。

img

虽然 AV Foundation 和 Audio Toolbox 提供的 API 已经能大致满足我们平常开发音视频应用所需,但是与前两者相比较,Audio Unit 主要有两大优势:

  1. 时效性高,Audio Unit 是接近硬件层导致对音频流的采集回调更加迅速,还可以直接合成乐器音,实时同步语音。
  2. 动态的重新配置:围绕 AUGraph opaque 类型构建的 audio processing graph API 允许以线程安全的方式动态组装,重新配置和重新排列复杂的音频处理链,同时处理音频。这是 iOS 中唯一提供此功能的音频 API。

基本概念

Audio Unit 主要涉及到三个常用的概念知识:

  1. AUGraph:包含和管理 Audio Unit 的组织者;
  2. AUNode/AudioComponent:AUGraph 音频处理环节中的一个节点。
  3. AudioUnit:音频处理组件,是对音频处理节点的实例描述者和操控者。

三者的关系:

我们不妨想像演唱会的舞台上,有录制歌声与乐器的麦克风,而从麦克风到输出到音响之间,还串接了大大小小的效果器。在这个过程中,无论是麦克风、音响或是效果器,都是不同的 AUNode。AUNode 是这些器材的实体,而我们要操控这些器材、改变这些器材的效果属性,就会需要透过每个器材各自的操控界面,这些界面便是 AudioUnit,最后构成整个舞台,便是 AUGraph。AUNode 与AudioComponent 的差别在于,其实像上面讲到的各种器材,除了可以放在 AUGraph 使用之外,也可以单独使用,比方说我们有台音响,我们除了把音响放在舞台上使用外,也可以单独拿这台音响输出音乐。当我们要在 AUGraph 中使用某个器材,我们就要使用 AUNode 这种形态,单独使用时,就使用AudioComponent。但无论是操作 AUNode 或 AudioComponent,都还是得透过 AudioUnit 这一层操作界面。

下图所示两路音频数据首先经过均衡器单元,然后再经过混音单元组合在一起,最后经由输入输出单元传输到到扬声器。

img

生命周期

  1. 运行时,获取对动态可链接库的引用,该库定义了 Audio Unit。
  2. 新建一个 Audio Unit 实例。
  3. 根据需求配置这个 Audio Unit 实例。
  4. 初始化 Audio Unit 实例已准备处理音频。
  5. 开启 Audio Unit。
  6. 控制 Audio Unit。
  7. 用完后释放 Audio Unit。

AudioUnit 类型

iOS提供了 4 大类别、7 种不同的 AuidoUnit。结构体 AudioComponentDescription 用来描述一个具体的AudioUnit:

typedef struct AudioComponentDescription {
		OSType componentType;
    OSType componentSubType;
    OSType componentManufacturer;
    UInt32 componentFlags;
    UInt32 componentFlagsMask;
} AudioComponentDescription;

其中:

  • componentType:AuidoUnit 类型,主要有四种:均衡器、混音、输入输出、格式转换。
  • componentSubType:四大类型对应的子类型,可以对照下面的表。
  • componentManufacturer:目前 iOS 开发中只有 kAudioUnitManufacturer_Apple。
  • componentFlags:一般设置为 0。
  • componentFlagsMask:一般设置为 0。
类型componentTypekAudioUnitType_Effect
均衡器kAudioUnitType_EffectkAudioUnitSubType_AUiPodEQ
混音kAudioUnitType_MixerkAudioUnitSubType_AU3DMixerEmbedded(多路)、kAudioUnitSubType_MultiChannelMixer(混音)
输入输出kAudioUnitType_OutputkAudioUnitSubType_RemoteIO(远端)、kAudioUnitSubType_VoiceProcessingIO(语音处理)、kAudioUnitSubType_GenericOutput(通用输出)
格式转换kAudioUnitType_FormatConverterkAudioUnitSubType_AUConverter
  • 均衡器(Effect Unit):提供一组预设均衡曲线,如重低音、流行音等等。

  • 混音(Mixer Units):

    • 3D Mixer unit:OpenAL 构建的基础,如果需要 3D Mixer Unit 特性,建议直接使用 OpenAL,因为它提供了很多封装好的功能强大的 API。

    • Multichannel Mixer unit:为一个或多个声道的声音提供混音功能,以立体声输出。可以单独打开或关闭其中一个声道的声音、调节音量、快进快退等。

  • 输入输出(I/O Units):

    • Remote I/O unit:直接连接输入、输出的音频硬件,以低延迟的方式访问单个接收或发出的音频采样点,提供了格式转换功能。

    • Voice-Processing I/O:通过声学的回声消除拓展了Remote I/O unit,常用于VoIP或语音通信的应用。它还提供了自动增益校正、语音处理质量调整和静音等功能。

    • Generic Output unit:不连接音频硬件而是提供了一种机制,将处理链的输出传递给应用程序,通常用来做离线音频处理。

  • 格式转换(Format Converter Unit):通常通过 I/O unit 间接使用。

IOS音频架构之Audio Unit 在前面的章节部分我们已经对IOS音频结构有了一个清晰的认识,知道Audio Unit是位于整个音频结构的最底层,这一层很多API已经开始和硬件打交道了。所以比较复杂,有了前面的基础再来看这个部分就比较的容易了。 先来看看Audio Unit的结构图: 结构图很简单了,就不做过多的描述了。重点说下中间那部分DSP。因为以前读研的时候学的是DSP嵌入式驱动开发算法移植,所以对这部分比较熟悉,就 阅读详情

相关推荐

WebRTC源码分析之IOS Audio Unit

本来没想要写这篇,毕竟不是什么关键技术,但是实在是因为苹果的文档和API实在太烂了,网上关于Audio Unit的文章也太少,写下来就算当个笔记。 WebRTC与声音设备有关的代码在modules/audio_device目录下面,包括各个平台的录音采集和播放声音的代码。 其中windows上的使用了Core Audio API。 Core Audio API 应该是Vista之后才支持的A...

云上听风的博客 2242

Audio Unit详解

一、什么是Audio Unit iOS提供了音频处理插件,支持混合、均衡、格式转换和实时输入/输出用于录制、播放、离线渲染和实时对话如VoIP(互联网协议语音)。你可以从iOS应用动态加载和使用它,这些强大和灵活的插件叫做Audio Unit。 Audio units通常工作在一个封闭对象的上下文中,该对象为audio processing graph,如下图。在此例中,你的app通过一个或多个callback functions发送audio到第一个audio unit,并对每个audio un...

u010029439的博客 1881

Core Audio音频基础概述

大多情况下,我们无法直接与HAL进行交互,Apple提供了一个特别的audio unit,即OS X中的AUHAL, iOS中的AURemoteIO, 我们可以通过它们让音频与硬件交互.

irainsa的博客 910

Audio Unit: iOS中最底层最强大的音频控制API

Audio Session基础(Core Audio基本数据结构(音视频基础知识C/C++ 简单数据结构,函数使用以下概念是文中常用的词语,因为其含义一般直接用英文表达, 一般不需中文翻译,可将其理解为固定名词词组.audio unit: 主要介绍的技术名称audio processing graph: 另一种处理audio unit的技术node: 承载audio unit的容器。

irainsa的博客 567

AT32F421玩转AM32电调:手把手教你调试过零点比较器,告别电机抖动

本文详细介绍了如何使用AT32F421芯片调试AM32电调的过零点比较器,解决电机抖动问题。通过硬件配置、软件环境搭建、比较器电路原理分析及filter_level参数动态调整等实战步骤,帮助开发者精准诊断和优化电机控制性能。

weixin_42525632的博客 276

手把手解决GD32H759I-EVAL以太网通信三大坑:IP冲突、端口绑定失败、LWIP内存泄漏

本文针对GD32H759I-EVAL开发板在以太网通信调试中常见的三大难题——IP地址冲突、端口绑定失败和LWIP内存泄漏,提供了详细的实战排障指南。文章深入分析了问题根源,并给出了具体的网络配置、端口管理策略和内存泄漏检测方法,帮助开发者快速定位并解决嵌入式网络通信中的棘手问题,确保系统稳定运行。

weixin_29196315的博客 141

Audio Unit | 使用特定的音频单元

Audio Unit | 使用特定的音频单元

ProgramNovice的博客 1399

树莓派驱动DLPDLCR230NPEVM+framebuffer显示图片

DLPDLCR230NPEVM DLP® LightCrafter™ Display 230NP 是一个易于使用的紧凑型即插即用评估平台,适用于消费类产品、工业、医疗和物联网 (IoT) 市场中的各种超便携显示应用。此评估模块 (EVM) 采用 DLP230NP 芯片组,该芯片组由DLP230NP.23 1080p DMD、DLPC3436显示控制器和DLPA2005PMIC/LED 驱动器组成。此 EVM 外形小巧,配备生产就绪型光学引擎以及支持 18 位 RGB 并行视频接口...

L_Y000的博客 2618

Audio Unit 介绍

关于 Audio Unit iOS 提供了音频处理插件,支持混音,声音均衡,格式转化,以及用于录音,回放,离线渲染,实时对话的输入输出。可以动态载入和使用这些强大而灵活的插件,在 iOS 应用中这些插件被称为 audio units。 Audio units 通常在被称为 audio processing graph 的封闭对象的上下文中进行工作,如图所示,应用程序通过一个或者多个回调函数将音频发...

weixin_30711917的博客 377

ksz9031 mmd读取不了_ZYNQ. LwIP.PHY.KSZ9031RNX

新一块板子米尔科技的z-turn 使用的PHY芯片是Micrel的 KSZ9031RNX 而不是zedboard上的Marvell的。直接使用lwip的echo server demo时会报错 , 无法启动。在网上找了很久终于找到几篇关于这个问题的文章。修改PHY的驱动xemacpsif_physpeed.c文件该芯片的PHY Identifier 是 0x0022bsp设置中修改参数以提速MEM...

weixin_39626298的博客 924

VMD-CNN-BiLSTM-Attention预测模型 —— 数学模型介绍&完整实例代码

想解决电力负荷预测中的非线性、非平稳难题?这篇博客介绍了一种创新混合模型,结合变分模态分解(VMD)和CNN-BiLSTM-Attention深度学习架构,实现超高精度预测! ✨ 核心亮点: ✅ VMD分解:有效分离复杂负荷信号,提取关键频率特征 ✅ 混合深度学习:CNN捕捉局部模式 + BiLSTM学习长时序依赖 + 注意力机制聚焦关键时段 ✅ 端到端优化:从数据预处理(滑动窗口、归一化)到模型训练(MSE损失+Adam优化),完整流程公开! ✅ 工业级评估:提供MSE、MAE、MAPE、R²多指标验证

qq_42924330的博客 1653

audio unit 混音

ios audio unit 提供了强大的混音功能, 这就就不介绍audioUnit 的基本逻辑和使用方法了,直接开始介绍介绍 要实现混音必须使用 audioGraph 1 : 第一步 初始化两个unit ( 一个misUnit 一个 ioUnit) // augraph CheckError(NewAUGraph(&auGraph), "New...

海阔天空 889

医学图像分割评价指标详解:从Dice到MSD的实战解析

本文深入解析医学图像分割的核心评价指标,从最常用的Dice相似系数到衡量边界精度的MSD(最大对称表面距离),通过实战案例与代码演示,系统阐述各指标的计算原理、应用场景及临床意义,帮助读者全面评估模型性能。

weixin_29070721的博客 593

iOS Audio Unit (一)

最近一直在做iOS音频相关技术的项目,期间在官方及网上的资料文档也学习了很多,当然,iOS平台中音频相关技术还是有很多方面的,这里我先总体概述下,然后以I/O Audio Unit为例对其概念,基本用法和思路进行讲解,可能不够全面,一些细节需要自行查找相关文档。后面我会对github上一个开源的音频引擎框架进行源码分析,来展现在更复杂的音频技术应用场景下可能的设计及实现方式。本文图片及大部分技术概念阐述均来自apple官网。

irainsa的博客 479

Android CCodec (十七) 硬件解码调用分析-1(基于V4l2)

简单的分析V4L2DecodeComponent和其相关内容,后续针对解码调用单独分析。

给大佬递杯卡布奇诺的博客 6594

基于深度学习YOLOv11的布匹缺陷检测系统(Python+PySide6界面+训练代码)

YOLOv11模型训练:根据布匹缺陷数据集训练YOLOv11模型,以识别布匹中的各种缺陷,如裂纹、污渍、破损等。PySide6界面设计:设计一个图形用户界面,帮助用户上传布匹图像,并显示模型的检测结果。模型优化与精度提升:通过数据增强、超参数调优等手段提高模型的准确性。本文介绍了如何基于YOLOv11实现布匹缺陷检测系统,并通过PySide6构建了一个图形用户界面。该系统能够自动检测布匹中的各种缺陷,具有较高的效率和精度。

斌擎科技 529

audio unit pcm 录制

OI UIint 实现录制播放 1.描述音频元件(kAudioUnitType_Output/kAudioUnitSubType_RemoteIO /kAudioUnitManufacturerApple)。 2.使用 AudioComponentFindNext(NULL, &descriptionOfAudioComponent) 获得 AudioCompone...

海阔天空 594

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

iOS 通过 Audio Unit 播放音频数据

1、采样率 每秒钟采得声音样本的次数,声音是一种能量波,有振幅和频率,人的耳朵可以听到的频率在20-Hz~20kHz之间的声波,所以采样率越高,获取的到的频率信息就更为丰富,由于人耳的分辨率很有限,太高的频率并不能分辨出来。目前最常用的是PCM格式的音频数据信号,因为这种高保真的信号方便后续的处理,还有就是它保留了数据的完整性。2、采样位数 采样位数,他是衡量声音播到变化的一个参数,它的数值越大,分辨率就越高,录制和回放的声音就越接近真实。3、查找、创建对应的音频输出单元组件。5、指定播放源的相关信息。

irainsa的博客 447

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

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

前言   在iOS中有很多方法可以进行音视频采集。如 AVCaptureDevice, AudioQueue以及Audio Unit。其中 Audio Unit是最底层的接口,它的优点是功能强大,延迟低; 而缺点是学习成本高,难度大。 对于一般的iOS应用程序,AVCaptureDevice和AudioQueue完全够用了。但对于音视频直播,最好还是使用 Audio Unit 进行处理,这样...

欢迎关注我 https://x.com/Awesome_AI_News 3472

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Audio Unit: iOS中最底层最强大音频控制API

如上图所示,输入端硬件将它的格式告诉Remote I/O unit的input element.开发者则在I/O unit的输出端指定了流格式,audio unit内部将根据需求自动进行转换,为了避免采样率转换,我们在定义ASBD时最好使用硬件使用的采样率.在上图,我们不必指定I/O unit的输出element,因为数据格式会从输入的element传给输出.同理,传给硬件的流将会根据硬件需要完成一次自动转换.Remote I/O unit的回调函数在其输入缓冲区中查找要处理的音频数据。

irainsa的博客 435

Audio-Unit-V3-Templates 项目教程

Audio-Unit-V3-Templates 项目教程 项目介绍 Audio-Unit-V3-Templates 是一个开源项目,旨在为开发者提供一系列用于创建 Audio Unit V3 插件的模板。这些模板可以帮助开发者快速上手并理解如何使用 Apple 的 Audio Unit API 来开发音频处理插件。项目包含了多个不同复杂度的模板,每个模板都附带详细的 README 文件,帮助开发者...

gitblog_01016的博客 513

开源项目常见问题解决方案:Audio-Unit-V3-Templates

开源项目常见问题解决方案:Audio-Unit-V3-Templates 1. 项目基础介绍 Audio-Unit-V3-Templates 是一个开源项目,旨在收集和整理用于创建 Audio Unit v3 插件的 Xcode 模板。Audio Unit 是苹果公司提供的一种音频处理插件框架,允许开发者创建音频效果、音频生成器、乐器等。该项目提供了不同复杂度的模板,帮助开发者快速开始 Audio...

gitblog_00237的博客 655

推荐文章:探索音频处理新境界 —— Audio-Unit-V3-Templates

推荐文章:探索音频处理新境界 —— Audio-Unit-V3-Templates 随着数字音频处理的日益普及,开发人员寻求高效、简洁的方式以构建自己的音频单元插件。今天,我们将深入探索一个为iOS和macOS平台设计的开源宝藏——Audio-Unit-V3-Templates,这是每一个音频工程师和应用开发者都不应错过的利器。 项目介绍 Audio-Unit-V3-Templates是一个精心设...

gitblog_00459的博客 697

html5 m4a,Audio Unit播放aac/m4a/mp3等文件

前言正文1、格式转换音频数据的格式转换包括采样率改变,单声道到多声道的转变、音调的升高降低等,audio unit有一个专门格式转换unit(kAudioUnitType_FormatConverter,type of 'aufc')。AudioUnit不支持vbr的数据,也不支持从一个有损压缩格式转换为pcm或者pcm转换为有损格式,对于有损格式的音频数据转换,需要用CoreAudio的Audi...

weixin_42504279的博客 1540
上一篇: Leetcode3185. 构成整天的下标对数目 II
下一篇: Leetcode3186. 施咒的最大总伤害
UestcXiye
博客等级 码龄8年 9030粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值