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

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

OEM 可以使用新的音频管道架构和传感器框架集成,提供支持头部跟踪的空间化音频效果以及所需的性能和延迟水平。 HID 协议指定如何通过蓝牙连接头部跟踪设备,并通过 Android 传感器框架将其用作 HID 设备。有关更多要求和验证,请参阅空间音频和头部跟踪

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

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

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

API实施

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

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

用户界面

实现Spatializer类后,验证您的 UI 是否具有以下行为:

  • 当支持空间音频的耳机配对后,该耳机的蓝牙设备设置会显示空间音频切换:

    spatial-audio-ui

    图 1.空间音频设置。

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

  • 最初与耳机配对后,空间音频的默认状态设置为“启用”

  • 用户选择的状态(无论是启用还是禁用)都会持续电话重新启动或取消配对和配对耳机。

功能行为

音频格式

当启用空间音频并且渲染设备是有线或蓝牙耳机时,必须通过空间效果渲染以下音频格式:

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

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

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

立体声内容播放

即使启用了空间音频,也不得通过空间效果引擎渲染立体声内容。如果实现允许立体内容空间化,它必须提供一个自定义 UI,让用户轻松打开或关闭此功能。启用空间音频后,必须能够在空间化多声道内容的播放之间转换为非空间化立体声内容,而无需更改用户设置或耳机重新连接或重新配置。空间音频内容和立体声内容之间的转换必须以最小的音频中断进行。

用例转换和并发

处理特殊用例如下:

  • 通知必须以与非空间音频内容相同的方式与空间音频内容混合。
  • 必须允许铃声与空间音频内容混合。然而,默认情况下,音频焦点机制会在有铃声时暂停空间音频内容。
  • 接听或拨打电话或视频会议时,空间音频播放必须暂停。通话结束时,空间音频播放必须以相同的空间音频设置恢复。重新配置音频路径以从空间音频模式切换到对话模式必须足够快速且无缝地进行,这样才不会影响通话体验。

通过扬声器渲染

不需要通过扬声器支持音频空间化或转耳模式

头部追踪实施指南

本节重点介绍动态空间音频,它具有特定的耳机要求。

用户界面

在实现并配对具有空间音频功能的耳机后,验证您的 UI 具有以下行为:

  • 在蓝牙设备设置中,启用耳机的Spatial Audio设置后,头部跟踪设置将出现在Spatial Audio下:

    ht-ui

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

  • 禁用空间音频时,头部跟踪设置不可见。

  • 最初与耳机配对后,头部跟踪的默认状态设置为“启用”

  • 用户选择的状态(无论是启用还是禁用)必须在电话重新启动或取消配对和配对耳机后持续存在。

功能行为

头部姿势报告

  • 从耳机发送到 Android 设备的头部姿势信息(以 x、y 和 z 坐标表示)必须快速准确地反映用户的头部运动。
  • 通过蓝牙链路进行的头部姿势报告必须遵循通过HID定义的协议。
  • 仅当用户在蓝牙设备设置 UI 中启用头部跟踪时,耳机才必须将头部跟踪信息发送到 Android 手机。

表现

潜伏

头部跟踪延迟定义为从惯性测量单元 (IMU) 捕获头部运动到耳机传感器检测到该运动引起的声音变化所需的时间。头部跟踪延迟不得超过 150 毫秒。

头部姿势报告率

当头部跟踪处于活动状态时,耳机必须按照建议的大约 20 毫秒的周期报告头部姿势。为了避免在蓝牙传输抖动期间触发手机上的过时输入检测逻辑,两次更新之间的最大时间不得超过 40 ms。

功耗优化

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

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

编解码器切换

当动态空间音频和头部跟踪打开时,请使用低延迟编解码器,例如Opus 。播放非空间音频内容时,请使用低功耗编解码器,例如高级音频编码 (AAC)

编解码切换时遵循以下规则:

  • 仅跟踪以下音频 HAL 输出流上的活动:
    • 专用空间化器输出
    • 媒体特定流,例如深度缓冲或压缩卸载播放
  • 当所有相关流都空闲并且空间化器流启动时,启动蓝牙流并将isLowLatency设置为true以指定低延迟编解码器。

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

  • 如果媒体流处于活动状态并且空间化器流启动,请重新启动蓝牙流并将isLowLatency设置为true

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

延迟模式调整

当选择低延迟编解码器时,会发生延迟模式调整。

根据头部跟踪是打开还是关闭,延迟模式调整使用可用的机制来减少或增加延迟,以达到延迟、功耗和音频质量之间的最佳折衷。当启用空间音频并启用头部跟踪时,将选择低延迟模式。当启用空间音频并禁用头部跟踪时,将选择自由延迟模式。当仅请求静态空间音频时,延迟调整可显着节省功耗并提高蓝牙音频链路的稳健性。最常见的延迟调整机制是减少或扩展蓝牙耳机中的抖动缓冲区大小。