Android 13 引入了对空间音频的支持,通过提供 API,应用开发者可以发现当前手机实现、连接的耳机和用户设置的组合是否允许以沉浸式方式播放多声道音频内容。
OEM 可以提供支持头部追踪的空间音频效果,并具有所需级别的性能和延迟,方法是使用新的音频管道架构和传感器框架集成。HID 协议 指定了如何通过蓝牙连接头部追踪设备,并通过 Android 传感器框架使其作为 HID 设备可用。有关更多要求和验证,请参阅空间音频和头部追踪。
本页面的指南适用于采用新的空间音频 API 和音频架构以及运行 Android 13 及更高版本的 Android 手机以及带有头部追踪传感器的兼容耳机的空间音频解决方案。
动态和静态空间音频模式的实现指南
静态空间音频不需要头部追踪,因此耳机中不需要特定功能。所有有线和无线耳机都可以支持静态空间音频。
API 实现
OEM 必须实现 Android 12 中引入的 Spatializer
类。该实现必须通过为 Spatializer
类引入的 CTS 测试。
稳健的 API 实现可确保应用开发者(尤其是媒体流服务)能够依赖整个生态系统中的一致行为,并根据设备功能、当前渲染环境和用户选择来选择最佳内容。
用户界面
实现 Spatializer
类后,验证您的 UI 是否具有以下行为
当支持空间音频的耳机配对后,此耳机的蓝牙设备设置会显示空间音频开关
图 1. 空间音频设置。
当耳机断开连接时,这些设置可用。
首次配对耳机后,空间音频的默认状态设置为启用。
用户选择的状态(无论是启用还是禁用)在手机重启或取消配对并重新配对耳机后仍然保持不变。
功能行为
音频格式
当空间音频启用且渲染设备是有线或蓝牙耳机时,空间化器效果必须渲染以下音频格式
- AAC,5.1 声道
- 原始 PCM,5.1 声道
为了获得更好的用户体验,我们强烈建议支持以下格式/声道配置
- Dolby Digital Plus
- 5.1.2、7.1、7.1.2、7.1.4 声道
立体声内容播放
即使空间音频已启用,立体声内容也不得通过空间化器效果引擎渲染。如果实现允许立体声内容空间化,则必须提供自定义 UI,让用户可以轻松地打开或关闭此功能。当空间音频启用时,必须可以在空间化多声道内容和非空间化立体声内容之间进行播放转换,而无需更改用户设置或重新连接或重新配置耳机。空间音频内容和立体声内容之间的转换必须以最小的音频中断发生。
用例转换和并发
按照以下方式处理特殊用例
- 通知必须以与非空间音频内容相同的方式与空间音频内容混合。
- 铃声必须允许与空间音频内容混合。但是,默认情况下,当有铃声时,音频焦点机制会暂停空间音频内容。
- 接听或拨打电话或视频会议时,空间音频播放必须暂停。通话结束后,空间音频播放必须以相同的空间音频设置恢复。音频路径的重新配置(从空间音频模式切换到会话模式)必须足够快速和无缝,以免影响通话体验。
通过扬声器渲染
不强制要求支持通过扬声器进行音频空间化,或双耳声模式。
头部跟踪实施指南
本节重点介绍动态空间音频,它有特定的耳机要求。
用户界面
在实现和配对支持空间音频的耳机后,验证您的 UI 是否具有以下行为
在蓝牙设备设置中,当耳机的空间音频设置启用时,头部跟踪设置会出现在空间音频下方
图 2. 空间音频和头部跟踪设置。
当空间音频禁用时,头部跟踪设置不可见。
首次配对耳机后,头部跟踪的默认状态设置为启用。
用户选择的状态(无论是启用还是禁用)必须在手机重启或取消配对并重新配对耳机后仍然保持不变。
功能行为
头部姿势报告
- 从耳机发送到 Android 设备的头部姿势信息(以 x、y 和 z 坐标表示)必须快速准确地反映用户的头部运动。
- 通过蓝牙链路进行的头部姿势报告必须遵循在 HID 上定义的协议。
- 仅当用户在蓝牙设备设置 UI 中启用头部跟踪时,耳机才必须将头部跟踪信息发送到 Android 手机。
性能
延迟
头部跟踪延迟定义为从惯性测量单元 (IMU) 捕获头部运动到耳机传感器检测到由该运动引起的声音变化所花费的时间。头部跟踪延迟不得超过 150 毫秒。
头部姿势报告速率
当头部跟踪处于活动状态时,耳机必须以大约 20 毫秒的建议周期性频率报告头部姿势。为了避免在蓝牙传输抖动期间触发手机上的陈旧输入检测逻辑,两次更新之间的最大时间不得超过 40 毫秒。
功耗优化
为了优化功耗,我们建议实现使用 audio HAL 和 Bluetooth audio HAL 接口提供的 蓝牙编解码器切换 和 延迟模式选择 机制。
音频框架和蓝牙堆栈的 AOSP 实现已支持控制编解码器切换的信号。如果 OEM 的实现对蓝牙音频使用主音频 HAL(称为编解码器卸载模式),则 OEM 必须确保音频 HAL 在音频 HAL 和蓝牙堆栈之间中继这些信号。
编解码器切换
当动态空间音频和头部跟踪开启时,使用低延迟编解码器,例如 Opus。当播放非空间音频内容时,使用低功耗编解码器,例如 高级音频编码 (AAC)。
在编解码器切换期间遵循以下规则
- 仅跟踪以下音频 HAL 输出流上的活动
- 专用空间化器输出
- 媒体特定流,例如深度缓冲区或压缩卸载播放
当所有相关流都处于空闲状态且空间化器流启动时,启动蓝牙流,并将
isLowLatency
设置为true
以指定低延迟编解码器。当所有相关流都处于空闲状态且媒体流启动时,启动蓝牙流,并将
isLowLatency
设置为false
以指定低功耗编解码器。如果媒体流处于活动状态且空间化器流启动,则重启蓝牙流,并将
isLowLatency
设置为true
。
在耳机侧,耳机必须同时支持低延迟和低功耗解码器,并实现标准编解码器选择协议。
延迟模式调整
当选择低延迟编解码器时,会发生延迟模式调整。
根据头部跟踪是开启还是关闭,延迟模式调整使用可用机制来减少或增加延迟,以在延迟、功耗和音频质量之间达到最佳折衷。当空间音频启用且头部跟踪启用时,选择低延迟模式。当空间音频启用且头部跟踪禁用时,选择自由延迟模式。当仅请求静态空间音频时,延迟调整可显著节省功耗并提高蓝牙音频链路的稳健性。最常见的延迟调整机制是减小或扩展蓝牙耳机中的抖动缓冲区大小。
有关 LE 音频的延迟模式调整,请参阅 LE 音频上的头部跟踪。