Android 9 弃用了之前各版车载 HAL 中的 AUDIO_* 属性,并改为使用包含显式函数调用和类型化参数列表的专用 AudioControl HAL。
这个新的 HAL 提供了 IAudioControl 作为主接口对象,该对象负责提供出于配置和音量控制目的与车辆的音频引擎进行交互所需的入口点。系统只能包含该对象的一个实例,即 CarAudioService 启动时创建的实例。该对象是传统 Android 音频 HAL 的汽车扩展;在大多数实现中,发布音频 HAL 接口的进程还应发布 IAudioControl interfaces。
支持的接口
AudioControl HAL 支持以下接口:
getBusforContext:在启动时针对每个上下文调用一次,以获取从 ContextNumber 到 busAddress 的映射。用法示例:
getBusForContext(ContextNumber contextNumber)
generates (uint32_t busNumber);
使车辆能够针对每个上下文告诉框架将物理输出音频流路由到哪里。对于每个上下文,必须返回有效的总线编号(0 - 总线数-1)。如果遇到无法识别的 contextNumber,则应返回 -1。对于任何上下文,如果返回无效的 busNumber,都会路由到总线 0。
任何通过此机制与同一个 busNumber 相关联的并发声音都会先通过 Android AudioFlinger 进行混音,然后才会作为单个音频流提供给音频 HAL。这会取代车载 HAL 属性 AUDIO_HW_VARIANT 和 AUDIO_ROUTING_POLICY。
setBalanceTowardRight:用于控制车载音响设备的右/左平衡设置。用法示例:
setBalanceTowardRight(float value);
将音响设备音量调向汽车右侧 (+) 或左侧 (-)。0.0 表示在中间,+1.0 表示完全调到右侧,-1.0 表示完全调到左侧,如果值未在 -1 到 1 之间,则是错误的。
setFadeTowardFront:用于控制车载音响设备的前/后淡化设置。用法示例:
setFadeTowardFront(float value);
将音响设备音量调向汽车前面 (+) 或后面 (-)。0.0 表示在中间,+1.0 表示完全调到前面,-1.0 表示完全调到后面,如果值未在 -1 到 1 之间,则是错误的。
配置音量
Android Automotive 实现应使用硬件放大器(而非软件混音器)来控制音量。为避免产生副作用,请在 device/generic/car/emulator/audio/overlay/frameworks/base/core/res/res/values/config.xml 中将 config_useFixedVolume 标记设为 true(根据需要叠加):
true
config_useFixedVolume 标记未设置或设为 false 时,应用可以调用 AudioManager.setStreamVolume(),并在软件混音器中按音频流类型更改音量。用户可能不希望出现这种情况,因为这会对其他应用带来潜在影响,而且使用硬件放大器接收信号时,软件混音器中的音量衰减会导致信号中的可用有效位减少。
配置音量组
CarAudioService 使用 packages/services/Car/service/res/xml/car_volume_group.xml 中定义的音量组。您可以替换此文件,以便根据需要重新定义音量组。系统在运行时会按 XML 文件中的定义顺序来识别音量组。ID 介于 0 到 N-1 之间,其中 N 是音量组的数量。示例:
此配置中使用的属性在 packages/services/Car/service/res/values/attrs.xml 中定义。
<