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博客