AAOS audiocontrol 研究

AAOS audiocontrol 研究

一 AAOS AudioControl 的介绍

google网站的介绍:

音频控制 HAL  |  Android 开源项目  |  Android Open Source Project

Android 9 中引入了音频控制 HAL,可支持与汽车相关的音频用例。从 Android 14 开始,音频控制 HAL 支持:

  • 淡变和平衡
  • HAL 音频焦点请求
  • 设备静音和闪避
  • 音频设备增益变化
  • 音频端口配置更改

如上图:CarAudioManager 提供了API给APP调用,直接控制Car Amp硬件。

二 AudioControl的起源

一个demo:device/generic/car/emulator/audio/halservice/android.hardware.audio.service-caremu.rc

service vendor.audio-hal /vendor/bin/hw/android.hardware.audio.service-caremu
    override
    class hal
    user audioserver
    # media gid needed for /dev/fm (radio) and for /data/misc/media (tee)
    group audio camera drmrpc inet media mediadrm net_bt net_bt_admin net_bw_acct wakelock context_hub
    capabilities BLOCK_SUSPEND
    ioprio rt 4
    task_profiles ProcessCapacityHigh HighPerformance

三 AudioControl aidl接口

hardware/interfaces/automotive/audiocontrol/aidl/android/hardware/automotive/audiocontrol

主要的接口API 是

IAudioControl.aidl:

package android.hardware.automotive.audiocontrol;
@VintfStability
interface IAudioControl {
  /**
   * @deprecated use {@link android.hardware.audio.common.PlaybackTrackMetadata} instead.
   */
oneway void onAudioFocusChange(in String usage, in int zoneId, in                android.hardware.automotive.audiocontrol.AudioFocusChange focusChange);
oneway void onDevicesToDuckChange(in android.hardware.automotive.audiocontrol.DuckingInfo[] duckingInfos);
oneway void onDevicesToMuteChange(in android.hardware.automotive.audiocontrol.MutingInfo[] mutingInfos);
oneway void registerFocusListener(in android.hardware.automotive.audiocontrol.IFocusListener listener);
oneway void setBalanceTowardRight(in float value);
oneway void setFadeTowardFront(in float value);
oneway void onAudioFocusChangeWithMetaData(in android.hardware.audio.common.PlaybackTrackMetadata playbackMetaData, in int zoneId, in android.hardware.automotive.audiocontrol.AudioFocusChange focusChange);
oneway void setAudioDeviceGainsChanged(in android.hardware.automotive.audiocontrol.Reasons[] reasons, in android.hardware.automotive.audiocontrol.AudioGainConfigInfo[] gains);
oneway void registerGainCallback(in android.hardware.automotive.audiocontrol.IAudioGainCallback callback);
void setModuleChangeCallback(in android.hardware.automotive.audiocontrol.IModuleChangeCallback callback);
void clearModuleChangeCallback();

IAudioGainCallback.aidl

 interface IAudioGainCallback {
    oneway void onAudioDeviceGainsChanged(in android.hardware.automotive.audiocontrol.Reasons[] reasons, in android.hardware.automotive.audiocontrol.AudioGainConfigInfo[] gains);
  }

IFocusListener.aidl

  interface IFocusListener {
    oneway void abandonAudioFocus(in String usage, in int zoneId);
    oneway void requestAudioFocus(in String usage, in int zoneId, in android.hardware.automotive.audiocontrol.AudioFocusChange focusGain);
    oneway void abandonAudioFocusWithMetaData(in android.hardware.audio.common.PlaybackTrackMetadata playbackMetaData, in int zoneId);
    oneway void requestAudioFocusWithMetaData(in android.hardware.audio.common.PlaybackTrackMetadata playbackMetaData, in int zoneId, in android.hardware.automotive.audiocontrol.AudioFocusChange focusGain);
  }  

IModuleChangeCallback.aidl

  interface IModuleChangeCallback {
    oneway void onAudioPortsChanged(in android.media.audio.common.AudioPort[] audioPorts);
  }

四 AudioControl和CarAudioService的联系

CarAudioService.init中的三个接口:

setupHalAudioFocusListenerLocked();

setupHalAudioGainCallbackLocked();

setupHalAudioModuleChangeCallbackLocked();

通过下面这个getservice 跟AIDL绑定起来

五 Google 的AudioControl demo

device/generic/car/emulator/audio/halservice/

android.hardware.audio.service-caremu.rc 会拉起 service.cpp 中的mian 函数

直接调pcm数据模拟duck效果

参考文档:Android 14 AAOS audio_registercarvolumecallback作用是?-CSDN博客

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
audiocontrol HAL从1.0切换到2.0版本需要修改以下几个地方: 1. 修改Android.mk文件:将HAL_MODULE_API_VERSION宏定义的值从1.0修改为2.0。 2. 修改audio_policy_configuration.xml文件:将audio_hw_modules节点的version属性值从1.0修改为2.0。 3. 修改audio_policy_configuration.h文件:将AUDIO_POLICY_DEVICE_MAX_MODULE_NAME_LEN常量值从32修改为64。 4. 修改audio.h文件:添加audio_hw_device_module_t的结构体定义,该结构体用于描述音频硬件设备模块。 5. 修改audio_hw.h文件:添加audio_hw_device_module_t的结构体定义,该结构体用于描述音频硬件设备模块。 6. 修改audio_hw.c文件:添加audio_hw_device_module_t的实现代码,包括打开音频硬件设备、关闭音频硬件设备、获取音频硬件设备支持的音频格式等函数。 7. 修改audio_policy.c文件:添加对新版audiocontrol HAL的支持,包括打开音频硬件设备、关闭音频硬件设备、获取音频硬件设备支持的音频格式等函数。 8. 修改AudioFlinger.cpp文件:添加对新版audiocontrol HAL的支持,包括打开音频硬件设备、关闭音频硬件设备、获取音频硬件设备支持的音频格式等函数。 9. 修改AudioPolicyService.cpp文件:添加对新版audiocontrol HAL的支持,包括打开音频硬件设备、关闭音频硬件设备、获取音频硬件设备支持的音频格式等函数。 需要注意的是,不同的硬件厂商可能对audiocontrol HAL进行了自定义修改,因此在切换版本时还需要考虑厂商自定义的部分。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值