本页面介绍了如何实现音频硬件抽象层 (HAL),提供了有关如何配置音频政策(文件格式、代码组织和预处理效果)的详细信息,并说明了如何配置共享库(创建 Android.mk
文件)。
音频 HAL 功能
对于音频 HAL,Android 10 版本包含以下新功能:
AudioSource
VOICE_PERFORMANCE
ECHO_REFERENCE
AudioFormat
AAC_LATM
(LC
、HE V1
和V2
)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 实现打包到共享库中。您还可以配置预处理效果,如自动增益控制和噪音抑制。