iOS音频播放(三)AudioUnit介绍与实战

本文详细介绍了iOS平台上的AudioUnit框架,它是Media Player、AV Foundation等高级音频框架的基础。AudioUnit提供了低延迟音频I/O、高度定制和特殊功能,适合于VoIP、游戏和音乐应用。文章讲解了如何创建和配置AudioUnit,包括两种创建方式:裸创建和使用AUGraph。此外,还探讨了AudioUnit的通用参数设置,如连接扬声器和麦克风,并展示了如何设置数据格式。最后,文章介绍了AudioUnit的五大类型及其子类型,包括Effect Unit、Mixer Units、I/O Units、Format Converter Units和Generator Units,以及它们的用途和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在iOS平台上,所有的音频框架底层都是基于AudioUnit实现的。较高层次的音频框架包括: Media Player、 AV Foundation、OpenAL和Audio Toolbox,这些框架都封装了AudioUnit,然后提供了更高层次的API(功能更少,职责更单一的接口)。

当开发者在开发音视频相关产品的时候,如果对音视频需要更高程度的控制、性能以及灵活性,或者想要使用一些特殊功能(回声消除)的时候,可以直接使用AudioUnit API。苹果官方文档中描述,AudioUnit提供了音频快速的模块化处理,如果是在以下场景中,更适合使用AudioUnit而不是使用高层次的音频框架。

  • 想使用低延迟的音频I/O(input或者output),比如说在VoIP的应用场景下。

  • 多路声音的合成并且回放,比如游戏或者音乐合成乐器的应用。

  • 使用AudioUnit里面提供的特有功能,比如:回声消除、Mix两轨音频,以及均衡器、压缩器、混响器等效果器。

  • 需要图状结构来处理音频,可以将音频处理模块组装到灵活的图状结构中,苹果公司为音频开发者提供了这种API。

构建AudioUnit的时候需要制定类型(Type)、子类型(subtype)以及厂商(Manufacture).类型(Type)就是四大类型的AudioUnit的Type;而子类型(subtype)就是该大类型下面的子类型(比如Effect该大类型下面有EQ、Compressor、limiter等子类型);厂商(Manufacture)一般情况下比较固定,直接写成kAudioUnitManufacturer_Apple就可以了。利用以上这三个变量开发者可以完整描述出一个AudioUnit了,比如使用下面的代码创建一个RemoteIO类型的AudioUnit:

AudioComponentDescription ioUnitDescription;

ioUnitDescription.componentType = kAudioUnitType_Output;

ioUnitDescription.componentSubType = kAudioUnitSubType_RemoteIO;

ioUnitDescription.componentManufacturer = kAudioUnitManufacturer_Apple;

ioUnitDescription.componentFlags = 0;

ioUnitDescription.componentFlagsMask = 0;复制代码

上诉代码构造了RemoteIO类型的AudioUnit描述的结构体,那么如何使用这个描述来构造真正的AudioUnit呢?有两种方式:第一种方式是直接使用AudioUnit裸的创建方式;第二种方式是使用AUGraph和AUNode(其实一个AUNode就是对AudioUnit的封装)来构建。下面就来分别介绍这两种方式。

(1) 裸创建方式

首先根据AudioUnit的描述,找出实际的AudioUnit类型:

AudioComponent ioUnitRef = AudioComponentFindNext(NULL,&ioUnitDescription);复制代码

然后声明一个AudioUnit引用:

AudioUnit ioUnitInstance;复制代码

最后根据类型创建这个AudioUnit实例:

AudioConponentInstanceNew(isUnitRef,&ioUnitInstance);复制代码

(2) AUGraph创建方式

首先声明并且实例化一个AUGraph:

AUGraph processingGraph;

NewAUGraph(&processingGraph);复制代码

然后按照AudioUnit的描述在AUGraph中添加了一个AUNode:

AUNode ioN

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值