Android底层开发之Audio HAL

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

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

一个完整的Android音频系统架构如图所示:

注:图来自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       HDMIAUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET USB Sound Card(USB audio)注:还有很多设备类型,由于并没有接触过就不翻译试的介绍了。

待续…

更多相关文章

  1. Android(安卓)MVVM 解读 3. Android(安卓)MVVM 介绍(1)
  2. 系出名门 Android(安卓)系列文章索引
  3. Android(安卓)之 使用MediaPlayer播放音频
  4. 在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程
  5. Android入门教程(四)之------Android工程目录结构介绍
  6. Android四大基本组件介绍与生命周期
  7. Google Android应用开发03 Android(安卓)SDK介绍
  8. android:windowSoftInputMode 介绍
  9. Android(安卓)属性动画(Property Animation)介绍

随机推荐

  1. JS: 使用模板字面量作为参数的函数
  2. Android(安卓)开发笔记 动画效果 --Anima
  3. Android弹出软键盘布局是否上移问题
  4. android 属性android:visibility
  5. Android的线程Handler实现
  6. Intellij下的android实践
  7. android体系介绍
  8. Android(安卓)Launcher研究(一)---------
  9. 用Android代码实现自动打开USB调试
  10. Android请求网络有三种方式:HttpURLConnec