增强 app 的音频录制能力
Enhance your app's audio recording capabilities
2025年6月9日
一句话判断
iOS 26 的音频录制能力有了质的飞跃——AirPods 高质量录音、空间音频捕获、Audio Mix 后期处理,三者组合起来可以做出接近专业录音笔的移动端体验。
这场 Session 讲了什么
这场 Session 覆盖了四个层面的音频能力提升,由音频软件工程师 Steve Nimick 主讲。
第一是输入设备选择。新增的 AVInputPickerInteraction 让用户在 app 内直接切换音频输入设备,支持实时音量表显示和麦克风模式选择,不需要跳转系统设置。系统会记住用户的选择,下次 app 激活时自动使用同一设备。
第二是 AirPods 高质量录音。iOS 26 新增 bluetoothHighQualityRecording 选项,使用专门针对内容创作者优化的蓝牙链路,平衡人声和环境音。在 AVAudioSession 中通过 category option 启用,在 AVCaptureSession 中通过属性开启。如果设备不支持,自动回退到标准 Bluetooth HFP 模式。
第三是空间音频捕获。iOS 18 引入了 AVCaptureMovieFileOutput 的空间音频录制,iOS 26 扩展到 AVAssetWriter,让纯音频 app(如 Voice Memos)也能录制空间音频。捕获使用 iPhone 的麦克风阵列录制 3D 场景,转换为一阶 Ambisonics(FOA)格式。文件结构包含一个 AAC 立体声兼容轨道、一个 APAC 格式的空间音频轨道、以及至少一个元数据轨道。新增 spatialAudioChannelLayoutTag 属性和 AVCaptureSpatialAudioMetadataSampleGenerator 辅助生成元数据。iOS 26 还支持同时使用 MovieFileOutput 和 AudioDataOutput,边录制文件边实时处理音频波形。
第四是 Audio Mix 播放与编辑。Cinematic 框架新增 Audio Mix API,支持在播放空间音频时控制前景(语音)和背景(环境音)的平衡。提供 Cinematic、Studio、In-Frame 三种预设模式,以及 6 个额外模式(如单独提取语音 stem 或纯环境音 stem)。可以通过 AVPlayer 的高级 API 或底层的 AUAudioMix AudioUnit 直接处理。
值得深挖的点
空间音频录制的文件格式与轨道结构
空间音频录制产生的文件结构比普通录音复杂得多,理解它对正确实现 playback 和后续处理至关重要。
一个合格的空间音频文件包含:一个 AAC 立体声轨道(兼容不支持空间音频的设备)、一个 APAC 格式的一阶 Ambisonics 轨道(4 通道:全向 + X/Y/Z 三个偶极子)、至少一个元数据轨道(包含 Audio Mix 的调优参数)。
APAC(Apple Positional Audio Codec)是 Apple 的空间音频编码格式。录制时,如果使用 AVCaptureMovieFileOutput,音频以 PCM 编码存储;如果使用 AVAssetWriter,需要自己创建两个 AssetWriterInput(一个 stereo、一个 FOA)和一个 metadata input。
元数据轨道的内容是录制停止时由捕获过程自动生成的。它包含对前景语音和背景环境音的增益、EQ 等调优参数——这些参数在录制时通过分析音频自动计算,在播放时通过 Audio Mix 应用。如果你用自己的 AVAssetWriter 录制,需要用 AVCaptureSpatialAudioMetadataSampleGenerator 从 FOA buffer 中生成这个元数据样本。
Trade-off:空间音频文件的体积比纯立体声大(多了 FOA 轨道和元数据),但提供了后期处理的巨大灵活性——你可以事后调整语音/环境音平衡、提取纯语音 stem、甚至渲染为 5.1 或 7.1.4 环绕声。如果你的 app 不需要这些后期能力,纯立体声录制仍然是更简单的选择。
AUAudioMix 的两种使用路径
Audio Mix 有两种使用方式,抽象层级不同:
AVPlayer 路径:创建 CNAssetSpatialAudioInfo 实例,调用 audioInfo.audioMix() 生成 AVAudioMix,设置到 AVPlayerItem 上。简单、高层,适合播放场景。
AUAudioMix AudioUnit 路径:直接操作底层 AudioUnit,适合不使用 AVPlayer 的 app(如音频编辑器、DAW)。AU 接收 4 通道 FOA 输入,分离为语音和环境音,输出给 AUSpatialMixer。你可以控制 RemixAmount、Style、EnableSpatialization、输出格式(耳机/内置扬声器/外置扬声器)等参数。
关键细节:AUAudioMix 需要从输入文件中读取 SpatialAudioMixMetadata(CFData 类型),这是录制时自动生成的调优参数。不设置这个 metadata,Audio Mix 的效果会大打折扣——没有调优参数,分离算法只能做通用处理,没有针对具体录音场景的优化。
Trade-off:AVPlayer 路径简单但灵活度有限(只能调整 intensity 和 style)。AUAudioMix 路径复杂但提供完全控制(可以自定义输出格式、绕过 spatialization、直接获取分离后的 stem)。对大多数播放类 app,AVPlayer 路径够用;对专业音频 app,需要 AUAudioMix。
代码片段
1. AirPods 高质量录音配置
场景:在录音 app 中启用 AirPods 高质量蓝牙录音。
let session = AVAudioSession.sharedInstance()
try session.setCategory(
.playAndRecord,
options: [.allowBluetooth, .bluetoothHighQualityRecording]
)
try session.setActive(true)
// 如果设备支持,自动使用高质量模式
// 否则回退到 BluetoothHFP
坑:bluetoothHighQualityRecording 选项需要和 allowBluetooth 一起使用。如果用户的 AirPods 不支持 H2 芯片,这个选项会被静默忽略。
2. Audio Mix 播放控制
场景:在视频播放器中添加语音/环境音平衡控制。
import Cinematic
let audioInfo = try CNAssetSpatialAudioInfo(asset: playerItem.asset)
audioInfo.renderingStyle = .cinematic
audioInfo.effectIntensity = 0.8
let audioMix = audioInfo.audioMix()
playerItem.audioMix = audioMix
坑:CNAssetSpatialAudioInfo 初始化时会检查 asset 是否包含空间音频轨道。如果文件不是空间音频录制的,初始化会失败。务必做好错误处理。
3. 用 AVAssetWriter 录制空间音频
场景:纯音频 app 录制带空间音频的 .qta 文件。
// 配置 capture input 为 FOA 模式
let input = AVCaptureDeviceInput(device: captureDevice)
input.multichannelAudioMode = .firstOrderAmbisonics
// 创建两个 AudioDataOutput
let stereoOutput = AVCaptureAudioDataOutput()
let foaOutput = AVCaptureAudioDataOutput()
foaOutput.spatialAudioChannelLayoutTag = kAudioChannelLayoutTag_HOA_ACN_SN3D
// 元数据生成器
let metadataGenerator = AVCaptureSpatialAudioMetadataSampleGenerator()
// 用 AVAssetWriter 写入 stereo + FOA + metadata 三个轨道
坑:同时使用 MovieFileOutput 和 AudioDataOutput 是 iOS 26 新增的能力。以前只能二选一,现在可以边录制文件边实时处理波形。
最佳实践
- 在 app 内使用
AVInputPickerInteraction让用户选择音频输入设备,而不是引导他们去系统设置。 - 对内容创作类 app 启用
bluetoothHighQualityRecording,这几乎零成本但对录音质量有显著提升。 - 录制空间音频时,始终同时包含 stereo 兼容轨道和 FOA 轨道,确保不支持空间音频的设备也能正常播放。
- 播放空间音频时,用 AVPlayer + CNAssetSpatialAudioInfo 的简单路径,除非你有特殊的渲染需求。
- 用
AUAudioMix时,务必从录制文件中读取 SpatialAudioMixMetadata 并应用到 AU 上,否则效果不理想。 - 如果你的 app 同时需要录制和实时处理音频,利用 iOS 26 的 MovieFileOutput + AudioDataOutput 并行能力。
还有什么值得关注
- iOS 26 新增 QuickTime Audio 格式(.qta),支持多音轨和 alternate track groups,适合纯音频 app 存储空间音频。
- AirPods 的 stem 按键可以通过
AVCaptureEventInteraction的远程捕获功能触发录音开始/停止,不需要接触手机。 - Cinematic 视频录制现在支持空间音频,详情参见 WWDC25 “Capture Cinematic video in your app”。