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

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

每个 iOS 音频单元都与所有其他设备有某些共同点,以及某些自己独特的东西。前面描述了共同的方面,其中包括需要在运行时找到音频单元,实例化它,并确保其流格式被适当设置。本章解释了音频单元之间的差异,并提供了如何使用它们的细节。

使用 I/O Unit

iOS 提供 3 种 I/O Unit:

  1. Remote I/O unit:绝大多数音频单元应用程序使用这种单元,该单元连接到输入和输出音频硬件,并提供对单个传入和传出音频数据的低延迟访问。
  2. Voice-Processing I/O unit:对于 VoIP 应用程序,语音处理 I/O 单元通过添加声波消除和其他功能来扩展远程 I/O 单元。
  3. Generic Output unit:要将音频发送回应用程序而不是输出音频硬件,请使用通用输出单元。

Remote I/O Unit

远程 I/O 单元(子类型为 kAudioUnitSubType_RemoteIO)连接到设备硬件进行输入、输出或同时输入和输出。在不需要回声抵消的情况下,将其用于播放、录制或低延迟同时输入和输出。

设备的音频硬件将其音频流格式强加在远程 I/O 单元的外向两侧。通过内置的格式转换器音频单元,音频单元提供硬件音频格式和应用程序音频格式之间的格式转换。

下表提供了此音频单元的使用详细信息。

Audio unit featureDetails
Elements一个输入元素:element 1。一个输出元素:element 0。
默认情况下,输入元素被禁用,输出元素被启用。如果您需要更改此操作,请设置 kAudioOutputUnitProperty_EnableIO 属性。
推荐的流格式属性kAudioFormatLinearPCM
AudioUnitSampleType
kAudioFormatFlagsAudioUnitCanonical
Stream format notes远程 I/O 单元的外向侧面从音频硬件获取其格式,如下所示:
1. 输入元素(element 1)输入范围从当前活跃的音频输入硬件获取其流格式。
2. 输出元素(element 0)输出范围从当前活动的输出音频硬件获取其流格式。
在输入元素的输出范围上设置应用程序格式。输入元素根据需要在其输入和输出范围之间执行格式转换(最好将应用程序流格式和硬件采样率保存一致)。如果输出元素的输入范围由音频单元连接,它将从该连接获取其流格式。但是,如果它是由渲染回调函数提供的,请在回调内设置应用程序格式。
ParametersiOS 中没有。
Property notes您无需在此音频单元上设置 kAudioUnitProperty_MaximumFramesPerSlice 属性。

Voice-Processing I/O Unit

语音处理 I/O 单元(子类型为 kAudioUnitSubType_VoiceProcessingIO)具有远程 I/O 单元的特点,并为双向双工通信添加了回声抑制。它还增加了自动增益校正、语音处理质量调整和静音。这是用于 VoIP(互联网协议语音)应用程序的正确 I/O 单元。

上表中列出的所有考虑因素也适用于语音处理 I/O 单元。此外,此音频单元有特定属性可用。

Generic Output Unit

通用输出单元(子类型为 kAudioUnitSubType_GenericOutput)常用于进行离线音频处理。当需要将 audio processing graph 的输出发送到应用程序而不是输出音频硬件时,请使用该音频单元。与其他 I/O 单元一样,通用输出单元包含一个格式转换器单元。这允许通用输出单元在 audio processing graph 中使用的流格式自定义的格式之间执行格式转换。

还可以让通用输出单元作为子 graph 中的最终节点,将其放入父 graph 中。

使用 Mixer Unit

iOS 提供两种混音器单元。一般使用多通道混音器单元,它为任意数量的单声道或立体声流提供混音。如果需要 3D 混音器单元的功能,使用 OpenAL 更好,它建立在 3D 混音器单元之上,通过更简单的 API 提供同等的性能,非常适合游戏应用程序开发。

Multichannel Mixer Unit

多通道混音器单元(子类型为 kAudioUnitSubType_MultiChannelMixer)接收任意数量的单声道或立体声流,并将其组合成单个立体声输出。它控制每个输入和输出的音频增益,并允许您单独打开或关闭每个输入。从 iOS 4.0 开始,多通道混音器支持每个输入的立体声平移。

下表提供了此音频单元的使用详细信息。

Audio unit featureDetails
Elements一个或多个输入元素,每个都可以是单声道或立体声。一个立体声输出元素。
推荐的流格式属性kAudioFormatLinearPCM
AudioUnitSampleType
kAudioFormatFlagsAudioUnitCanonical
Stream format notes在 input scope 内,管理流格式:
1. 如果 input bus 由音频单元连接提供,它会从该连接获取其流格式。
2. 如果 input bus 由渲染回调函数提供,请在 bus 上设置完整的流格式,使用与回调提供的数据相同的流格式。
在 output scope 内,仅设置应用程序采样率。
属性kAudioUnitProperty_MeteringMode
Property notes默认情况下,kAudioUnitProperty_MaximumFramesPerSlice 属性设置为 1024,当屏幕锁定和显示器睡眠时,这是不够的。如果要让应用程序在屏幕锁定的情况下播放音频,必须增加此属性的值:
1. 如果音频输入处于活动状态,则无需为 kAudioUnitProperty_MaximumFramesPerSlice 属性设置值。
2. 如果音频输入未激活,请将此属性设置为 4096。

3D Mixer Unit

3D 混音器单元(子类型为 kAudioUnitSubType_3DMixer)控制每个输入的立体声平移、播放速度和增益,并控制其他特征,如与侦听器的视距离。3D 混音器单元也控制输出的音频增益。

在大多数情况下,如果需要 3D 混音器单元的功能,最佳选择是使用 OpenAL。

下表提供了此音频单元的使用详细信息。

Audio unit featureDetails
Elements一个或多个输入元素,每个都是单声道的。一个立体声输出元素。
推荐的流格式属性UInt16
kAudioFormatFlagsCanonical
Stream format notes在 input scope 内,管理流格式:
1. 如果 input bus 由音频单元连接提供,它会从该连接获取其流格式。
2. 如果 input bus 由渲染回调函数提供,请在 bus 上设置完整的流格式,使用与回调提供的数据相同的流格式。
在 output scope 内,仅设置应用程序采样率。
属性请注意,3D 混音器音频单元属性大多仅在此音频单元的 Mac OS X 版本中实现。
Property notes默认情况下,kAudioUnitProperty_MaximumFramesPerSlice 属性设置为 1024,当屏幕锁定和显示器睡眠时,这是不够的。如果要让应用程序在屏幕锁定的情况下播放音频,必须增加此属性的值:
1. 如果音频输入处于活动状态,则无需为 kAudioUnitProperty_MaximumFramesPerSlice 属性设置值。
2. 如果音频输入未激活,请将此属性设置为 4096。

使用 Effect Unit

iPod EQ 单元(子类型为 kAudioUnitSubType_AUiPodEQ)是 iOS 4 中提供的唯一效果单元。它与内置 iPod 应用程序使用的均衡器相同。要查看此音频单元的 iPod 应用程序的用户界面,请转到设置>iPod>EQ。此音频单元提供一组预设的均衡曲线,如 Bass Booster、Pop 和 Spoken Word。

下表提供了此音频单元的使用详细信息。

Audio unit featureDetails
Elements一个单声道或立体声输入元素。一个单声道或立体声输出元素。
推荐的流格式属性kAudioFormatLinearPCM
AudioUnitSampleType
kAudioFormatFlagsAudioUnitCanonical
Stream format notes在 input scope 内,管理流格式:
1. 如果 input bus 由音频单元连接提供,它会从该连接获取其流格式。
2. 如果 input bus 由渲染回调函数提供,请在 bus 上设置完整的流格式,使用与回调提供的数据相同的流格式。
在 output scope 内,仅设置应用程序采样率。
属性kAudioUnitProperty_FactoryPresetskAudioUnitProperty_PresentPreset
Property notesiPod EQ 单元提供一组预定义的色调均衡曲线作为出厂预设。通过访问音频单元的 kAudioUnitProperty_FactoryPresets 属性来获取可用的 EQ 设置数组。然后,可以通过将其用作 kAudioUnitProperty_PresentPreset 属性的值来应用设置。
默认情况下,kAudioUnitProperty_MaximumFramesPerSlice 属性设置为 1024,当屏幕锁定和显示器睡眠时,这是不够的。如果要让应用程序在屏幕锁定的情况下播放音频,必须增加此属性的值:
1. 如果音频输入处于活动状态,则无需为 kAudioUnitProperty_MaximumFramesPerSlice 属性设置值。
2. 如果音频输入未激活,请将此属性设置为 4096。

音频单元的 Identifier Keys

下表提供了访问每个 iOS 音频单元的动态链接库所需的 Identifier Keys,以及音频单元的简要描述。

Name and descriptionIdentifier keysCorresponding four-char codes
Converter unit
支持转换为线性 PCM 或来自线性 PCM 的音频格式转换。
kAudioUnitType_FormatConverter
kAudioUnitSubType_AUConverter
kAudioUnitManufacturer_Apple
aufc
conv
appl
iPod Equalizer unit
提供 iPod 均衡器的功能。
kAudioUnitType_Effect
kAudioUnitSubType_AUiPodEQ
kAudioUnitManufacturer_Apple
aufx
ipeq
appl
3D Mixer unit
支持混合多个音频流、输出平移、采样率转换等。
kAudioUnitType_Mixer
kAudioUnitSubType_AU3DMixerEmbedded
kAudioUnitManufacturer_Apple
aumx
3dem
appl
Multichannel Mixer unit
支持将多个音频流混合到单个流中。
kAudioUnitType_Mixer
kAudioUnitSubType_MultiChannelMixer
kAudioUnitManufacturer_Apple
aumx
mcmx
appl
Generic Output unit
支持转换为线性PCM格式;可用于启动和停止 graph。
kAudioUnitType_Output
kAudioUnitSubType_GenericOutput
kAudioUnitManufacturer_Apple
auou
genr
appl
Remote I/O unit
连接到设备硬件进行输入、输出或同时输入和输出。
kAudioUnitType_Output
kAudioUnitSubType_RemoteIO
kAudioUnitManufacturer_Apple
auou
rioc
appl
Voice Processing I/O unit
具有 I/O 单元的特性,并为双向通信添加了回声抑制。
kAudioUnitType_Output
kAudioUnitSubType_VoiceProcessingIO
kAudioUnitManufacturer_Apple
auou
vpio
appl
  • 31
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

UestcXiye

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

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

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

打赏作者

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

抵扣说明:

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

余额充值