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 之 使用MediaPlayer播放音频
  2. 在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程
  3. Android 音频系统:从 AudioTrack 到 AudioFlinger
  4. Android Studio怎么新建Android公共库模块?
  5. Android应用开发学习笔记之播放音频
  6. Android通过OpenSL ES播放音频套路详解
  7. Android帧缓冲区(Frame Buffer)硬件抽象层(HAL) 模块Gralloc的实现原
  8. Android Kotlin开发模块之间跳转-ARouter

随机推荐

  1. 关于Android(安卓)Studio开发环境变量的
  2. android:shape妙用
  3. Android控件RecyclerView和ListView的异
  4. 关于解决android studio各种疑难杂症系列
  5. 12.1 學習筆記 html div塊邊框圓角,footer
  6. 【自定义View系列】android的UI结构
  7. M2使用教程
  8. android IM的实现:聊天室(采用smack API)
  9. Android开发实践 Intent 解析
  10. Android开发中的优化方案