Android底层开发之Audio HAL

Android底层开发之Audio HAL

Android音频底层调试-基于tinyalsa中以「抛开Android的天生复杂,回归嵌入式Linux的本质」的方式介绍如何调试Linux内核中的音频驱动。
这里向上再伸展一下进入HAL层,看是如何将tinyalsa封装给Frameworks使用的。

基于4.2.2版本源码进行讨论。Android官方教程是Audio Implementing the HAL.

一个完整的Android音频系统架构如图所示:
Alt text
注:图来自Android音频系统之音频框架

简化理解Audio系统

中间部分定义为黑匣子,暂不去了解其内部结果,因为最终的执行都是会到最下端的Android HAL中的。
黑匣子

WiredAccessoryManager.java介绍

该服务是轮循方式地检测有线的音频设备,如有线耳机/HDMI/USB声卡等等。是在如黑匣子图右侧1处将事件传入。
最终会调用到Audio HAL部分。检测的事件以及设备类型见audio_policy.conf介绍节。

audio_policy.conf介绍

除了global_configuration,还有一个audio_hw_modules是代表不同音频硬件模块,
* primary是主要的处理模块;
* a2dp是处理蓝牙音乐传输模块;
* usb是处理usb声卡模块;
* r_submix是全称是remote submix,是处理远程音频目前主要是Miracast(基于Wi-Fi Direct的屏幕共享协议)。

这么分类是Google的意思,但是真正做的时候并不一定完全坚如照做。比如单独使用primary就附带做了hdmi/usb音频处理也是可行的。当然了,这里需要在对于模块的device中加入需要处理的device type。

常见的有线的音频设备类型与其对应的中文意思:

AUDIO_DEVICE_OUT_WIRED_HEADSET     耳机
AUDIO_DEVICE_OUT_WIRED_HEADPHONE   无Mic耳机
AUDIO_DEVICE_OUT_AUX_DIGITAL       HDMI
AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET USB Sound Card(USB audio)
注:还有很多设备类型,由于并没有接触过就不翻译试的介绍了。

待续…

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

袁保康

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值