Google 致力于为黑人社区推动种族平等。查看具体举措

音频实现

本页面介绍了如何实现音频硬件抽象层 (HAL),提供了有关如何配置音频政策(文件格式、代码组织和预处理效果)的详细信息,并说明了如何配置共享库(创建 Android.mk 文件)。

音频 HAL 功能

对于音频 HAL,Android 10 版本包含以下新功能:

  • AudioSource
    • VOICE_PERFORMANCE
    • ECHO_REFERENCE
  • AudioFormat
    • AAC_LATMLCHE V1V2
    • CELT
    • APTX_ADAPTIVE
    • LHDC
    • LHDC_LL
  • AudioChannelMask
    • OUT_HAPTIC_A
    • OUT_HAPTIC_B

audio_policy_configuration.xml 中声明这些 HAL 功能,以供框架使用。

音频 HAL 和子系统要求

对于音频 HAL 和子系统实现,Android 10 版本存在下列要求:

  • 如果在 audio_policy_configuration.xml 中声明了单独的输入流配置文件,则对于任何设备选择,都必须能够同时激活它们
  • 如果有一个输入配置文件支持声音触发器捕获(从启动指令 DSP 缓冲区捕获),该实现必须支持此配置文件上与声音触发器 HAL 支持的并发会话数量相对应的多个活跃信息流。
  • 从 AP 并发进行 DSP 启动指令检测和捕获。
  • 从 AP 并发进行语音通话 TX 和捕获。

实现音频 HAL

音频 HAL 由以下接口组成:

  • hardware/libhardware/include/hardware/audio.h 表示音频设备的主函数。
  • hardware/libhardware/include/hardware/audio_effect.h 表示可应用于音频的效果,如缩混、回音或噪音抑制。

您必须实现所有接口。

与低版本相比,Android 11 更加严格地强制执行运行时声音触发器 HAL 实现。

这会影响 //hardware/interfaces/soundtrigger/ 下指定的 HIDL 接口的实现。

这些 HAL 接口的规范并不特定于:

  • 允许实现从操作返回错误代码的时间
  • 实现的结果状态
  • 预期的错误恢复过程

此外,由于声音触发器子系统的不透明性,VTS 测试无法有效覆盖这些场景。

为确保各驱动程序实现的行为可靠且一致,在 Android 11 中,我们将从 HAL 返回的所有非成功错误代码都视为编程错误,并尝试通过重新启动 HAL 进程(也可能是其他进程)从这类错误中恢复。这是到万不得已时才会使用的恢复策略;按照预期,正常运行的系统中不会发生这些情况。

我们强烈建议声音触发器 HAL 的实现人员尽快针对可能导致返回错误代码的场景进行严格测试,并提供有关此方法的反馈。我们预计这项变更并不会导致任何与 Treble/VTS 相关的故障,但是可能会出现与系统相关的新故障,您需要尽早解决。从长远来看,此变更可以确保平台间的行为更加可靠、一致。

音频标头文件

如需查看您可以定义的属性的参考信息,请参阅音频标头文件:

  • 在 Android 6.0 及更高版本中,请参阅 system/media/audio/include/system/audio.h
  • 在 Android 5.1 及更低版本中,请参阅 system/core/include/system/audio.h

例如,请参阅 device/samsung/tuna/audio 中的 Galaxy Nexus 实现。

后续步骤

除了实现音频 HAL 之外,您还必须创建音频政策配置文件,用于描述您的音频拓扑,并将 HAL 实现打包到共享库中。您还可以配置预处理效果,如自动增益控制和噪音抑制。