Audio Unit | 使用特定的音频单元
Audio Unit | 使用特定的音频单元
每个 iOS 音频单元都与所有其他设备有某些共同点,以及某些自己独特的东西。前面描述了共同的方面,其中包括需要在运行时找到音频单元,实例化它,并确保其流格式被适当设置。本章解释了音频单元之间的差异,并提供了如何使用它们的细节。
使用 I/O Unit
iOS 提供 3 种 I/O Unit:
- Remote I/O unit:绝大多数音频单元应用程序使用这种单元,该单元连接到输入和输出音频硬件,并提供对单个传入和传出音频数据的低延迟访问。
- Voice-Processing I/O unit:对于 VoIP 应用程序,语音处理 I/O 单元通过添加声波消除和其他功能来扩展远程 I/O 单元。
- Generic Output unit:要将音频发送回应用程序而不是输出音频硬件,请使用通用输出单元。
Remote I/O Unit
远程 I/O 单元(子类型为 kAudioUnitSubType_RemoteIO)连接到设备硬件进行输入、输出或同时输入和输出。在不需要回声抵消的情况下,将其用于播放、录制或低延迟同时输入和输出。
设备的音频硬件将其音频流格式强加在远程 I/O 单元的外向两侧。通过内置的格式转换器音频单元,音频单元提供硬件音频格式和应用程序音频格式之间的格式转换。
下表提供了此音频单元的使用详细信息。
Audio unit feature | Details |
---|---|
Elements | 一个输入元素:element 1。一个输出元素:element 0。 默认情况下,输入元素被禁用,输出元素被启用。如果您需要更改此操作,请设置 kAudioOutputUnitProperty_EnableIO 属性。 |
推荐的流格式属性 | kAudioFormatLinearPCM AudioUnitSampleType kAudioFormatFlagsAudioUnitCanonical |
Stream format notes | 远程 I/O 单元的外向侧面从音频硬件获取其格式,如下所示: 1. 输入元素(element 1)输入范围从当前活跃的音频输入硬件获取其流格式。 2. 输出元素(element 0)输出范围从当前活动的输出音频硬件获取其流格式。 在输入元素的输出范围上设置应用程序格式。输入元素根据需要在其输入和输出范围之间执行格式转换(最好将应用程序流格式和硬件采样率保存一致)。如果输出元素的输入范围由音频单元连接,它将从该连接获取其流格式。但是,如果它是由渲染回调函数提供的,请在回调内设置应用程序格式。 |
Parameters | iOS 中没有。 |
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 feature | Details |
---|---|
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 feature | Details |
---|---|
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 feature | Details |
---|---|
Elements | 一个单声道或立体声输入元素。一个单声道或立体声输出元素。 |
推荐的流格式属性 | kAudioFormatLinearPCM AudioUnitSampleType kAudioFormatFlagsAudioUnitCanonical |
Stream format notes | 在 input scope 内,管理流格式: 1. 如果 input bus 由音频单元连接提供,它会从该连接获取其流格式。 2. 如果 input bus 由渲染回调函数提供,请在 bus 上设置完整的流格式,使用与回调提供的数据相同的流格式。 在 output scope 内,仅设置应用程序采样率。 |
属性 | kAudioUnitProperty_FactoryPresets 和 kAudioUnitProperty_PresentPreset |
Property notes | iPod EQ 单元提供一组预定义的色调均衡曲线作为出厂预设。通过访问音频单元的 kAudioUnitProperty_FactoryPresets 属性来获取可用的 EQ 设置数组。然后,可以通过将其用作 kAudioUnitProperty_PresentPreset 属性的值来应用设置。 默认情况下,kAudioUnitProperty_MaximumFramesPerSlice 属性设置为 1024,当屏幕锁定和显示器睡眠时,这是不够的。如果要让应用程序在屏幕锁定的情况下播放音频,必须增加此属性的值: 1. 如果音频输入处于活动状态,则无需为 kAudioUnitProperty_MaximumFramesPerSlice 属性设置值。 2. 如果音频输入未激活,请将此属性设置为 4096。 |
音频单元的 Identifier Keys
下表提供了访问每个 iOS 音频单元的动态链接库所需的 Identifier Keys,以及音频单元的简要描述。
Name and description | Identifier keys | Corresponding 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 |
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » Audio Unit | 使用特定的音频单元
发表评论 取消回复