实现高质量的空间音频和头部追踪

Android 13 引入了对空间音频的支持。为此,Android 13 提供了一些 API,可让应用开发者了解当前的手机实现、连接的耳机和用户设置是否允许以沉浸式方式播放多声道音频内容。

OEM 采用新的音频流水线架构和传感器框架集成,可提供空间音频效果,支持头部追踪,并满足所需的性能和延迟时间要求。HID 协议指定如何通过蓝牙来连接头部跟踪设备,并通过 Android 传感器框架将其用作 HID 设备。如需详细了解相关要求和验证,请参阅空间音频和头部跟踪

此页面上的指南适用于采用新的空间音频 API 和音频架构的空间音频解决方案,搭载 Android 13 及更高版本的 Android 手机,以及带有带头部跟踪传感器的兼容耳机。

动态和静态空间音频模式实现指南

静态空间音频不需要头部追踪,因此耳机不需要特定功能。所有有线耳机和无线耳机都可以支持静态空间音频。

API 实现

OEM 必须实现 Android 12 中引入的 Spatializer 类。实现必须通过针对 Spatializer 类引入的 CTS 测试

强大的 API 实现可以确保应用开发者(尤其是在线媒体服务)能够依赖整个生态系统中的一致行为,并根据设备功能、当前渲染上下文和用户选择来找出最佳内容。

界面

在实现 Spatializer 类之后,请验证您的界面是否具有以下行为:

  • 与支持空间音频的耳机进行配对时,耳机的蓝牙设备设置会显示空间音频切换开关:

    spatial-audio-ui

    图 1. 空间音频设置。

  • 当耳机断开连接时,这些设置处于可用状态。

  • 首次配对耳机后,空间音频的默认状态会设置为“启用”

  • 用户选择的状态(无论是启用还是停用)将在手机重新启动、取消配对耳机以及配对耳机之后持久保留。

功能行为

音频格式

如果启用了空间音频,并且呈现设备是有线或蓝牙耳机,则必须通过空间化程序效果呈现以下音频格式:

  • AAC、5.1 声道
  • 原始 PCM、5.1 声道

为了提供更好的用户体验,我们强烈建议支持以下格式/声道配置:

  • 杜比数字+
  • 5.1.2、7.1、7.1.2 和 7.1.4 声道

立体声内容播放

即使启用了空间音频,也不得通过空间化程序效果引擎呈现立体声内容。如果设备实现允许实现立体声内容空间化,则必须呈现自定义界面,以便用户轻松开启或关闭此功能。启用空间音频后,必须能够在空间化多声道内容播放与非空间化立体声内容之间转换,而无需更改用户设置、重新连接耳机或重新配置。空间音频内容与立体声内容之间的转换必须尽可能减少音频中断。

用例转换和并发

请按照以下方式处理特殊用例:

  • 通知必须与空间音频内容混合,就像与非空间音频内容混合一样。
  • 允许将铃声与空间音频内容混在一起。不过,默认情况下,当有铃声时,音频焦点机制会暂停空间音频内容。
  • 接听或拨打电话或召开视频会议时,必须暂停空间音频播放。空间音频播放必须在通话结束时使用相同的空间音频设置恢复播放。如需重新配置音频路径以从空间音频模式切换到对话模式,必须足够快速顺畅地完成配置,以避免影响通话体验。

通过扬声器呈现

无需支持基于扬声器的音频空间或双耳模式

头部追踪实现指南

本部分将重点介绍动态空间音频,此类音频有特定的耳机要求。

界面

实现支持空间音频的耳机并进行配对后,验证界面是否具有以下行为:

  • 在蓝牙设备设置中,启用头戴式耳机的空间音频设置后,空间音频下会显示头部跟踪设置:

    ht-ui

    图 2. 空间音频和头部跟踪设置。

  • 当停用空间音频后,系统不会显示头部跟踪设置。

  • 首次配对耳机后,头部追踪的默认状态会设置为“已启用”

  • 用户选择的状态(无论是启用还是停用)必须在手机重新启动、取消配对耳机以及配对耳机之后持久保留。

功能行为

头部姿势报告

  • 从耳机发送到 Android 设备的头部姿势信息(x 轴、y 轴和 z 轴坐标)必须快速准确地反映用户的头部移动。
  • 通过蓝牙链接进行的头部姿势报告必须遵循通过 HID 定义的协议。
  • 只有当用户在蓝牙设备设置界面中启用头部追踪时,头戴式耳机才能将头部追踪信息发送到 Android 手机。

性能

延迟时间

头部跟踪延迟时间是指,从惯性测量单元 (IMU) 捕获的头部运动到耳机变频器检测到此动作引起的声音变化所经历的时间。头部跟踪延迟时间不得超过 150 毫秒。

头部姿势报告率

当头部追踪功能处于启用状态时,耳机必须按照大约 20 毫秒的推荐周期时间来报告头部姿势。为避免在蓝牙的传输抖动期间触发过时的输入检测逻辑,两次更新之间的最长时间不得超过 40 毫秒。

电源优化

为了优化电源,我们建议该实现使用由音频 HAL蓝牙音频 HAL 接口提供的蓝牙编解码器切换延迟模式选择机制。

音频框架和蓝牙堆栈的 AOSP 实现已经支持用于控制编解码器切换的信号。如果 OEM 的实现使用适用于蓝牙音频的主要音频 HAL(称为编解码器分流模式),OEM 必须确保音频 HAL 在音频 HAL 和蓝牙堆栈之间中继这些信号。

编解码器切换

在启用动态空间音频和头部追踪的情况下,请使用低延迟编解码器,例如 Opus。在播放非空间音频内容时,请使用低功耗编解码器,例如高级音频编码 (AAC)

在编解码器切换期间,请遵循以下规则:

  • 仅跟踪以下音频 HAL 输出流上的 activity:
    • 专用空间化程序输出
    • 媒体专用流,例如深度缓冲区或压缩分流播放
  • 当所有相关流均处于空闲状态且空间化程序流启动时,请将 isLowLatency 设置为 true 以指定低延迟编解码器并启动蓝牙数据流。

  • 当所有相关流均处于空闲状态且媒体流启动时,请将 isLowLatency 设置为 false 以指定低功耗编解码器并启动蓝牙流。

  • 当媒体流处于活动状态且空间化程序流启动时,请将 isLowLatency 设置为 true 并重启蓝牙流。

在耳机端,耳机必须同时支持低延迟解码器和低功耗解码器,并实现标准的编解码器选择协议。

延迟模式调整

选择低延迟编解码器时,系统会对延迟模式进行调整。

根据头部追踪处于开启还是关闭状态,延迟模式调整使用可用的机制来减少或增加延迟时间,以尽可能在延迟时间、功耗与音频质量之间取得平衡。如果空间音频和头部追踪同时处于启用状态,系统会选择低延迟模式。如果空间音频已启用但头部追踪未启用,系统会选择自由延迟模式。当仅请求静态空间音频时,延迟调整可显著节省电量并增强蓝牙音频链路的稳健性。最常见的延迟调整机制是减少或扩展蓝牙耳机中的抖动缓冲区大小。

如需了解针对 LE 音频的延迟模式调整,请参阅通过 LE 音频实现头部追踪