该小节我们来讲解Android音频系统框架,了解了框架之后,我们才能更加容易的去查看以及分析源码,有了框架才不会遗失方向。

下面是一个大框图,该小节我们将围绕下面的图示进行讲解:

以前总提到,写应用程序的人,不应该关心应用的实现,所以我们会给硬件写一个驱动,然后写应用程序的人直接调用驱动就可以访问硬件了如下:

简单的应用程序使用这种方法是没问题的,但是一些复杂的硬件还是不行,应用程序需要了解很多驱动的接口,于是就进行了改进,在驱动和APP之间加入一些库,APP去访问那些库,进而访问驱动。这些库封装了声卡复杂的使用方法。对于音频系统,库lib有两种选择,一种是alsa-lib,以及alsa-lib的简化版本tinyalsa。

但是应用程序还想偷懒,他还需要去设置各种参数,但是应用程序想参加去设定这些参数,所以变成了如下:

应用程序调用厂家提供的HAL,HAL会去调用lib传入厂家熟悉的参数,然后lib访问驱动。

在前面的分层中只涉及到一个应用程序,那如果有多个应用程序同时播放声音怎么办?那么肯定需要有人去收集他们的声音,混合起来播放,所以出现了如下结构:

APP1,APP2把声音发给AudioFlinger,AudioFlinger进行合并后向下发出。

我们在使用手机的时候,接上耳机,就用耳机播放声音,如果有蓝牙,则使用蓝牙播放声音,如果都没有,就使用喇叭播放,那么谁去决定什么时候,用什么设备播放,在术语上称为AudioPoicy(策略),所以在框图中还要一个AudioPoicy存在,

前面提到了AudioFlinger,他和APP1,APP2都是不同的进程,所以他们是通过binder通信,

这些访问细节被AudioTrack封装,也就是APP通过AudioTrack使用AudioFlinger服务。注意AudioTrack是c++实现的。前面说的APP也代表是c++编写,那如果是使用java编写的呢?所以最后形成了如下框图:

APP1,APP2都为java编写,为java提供一个java层的AudioTrack封装,只不过该AudioTrack会直接访问到C++实现的AudioTrack。C++的AudioTrack去使用AudioFlinger的服务,AudioFlinger在调用厂家提供的tinyalsa这个库,最终访问到驱动。

完成的框图如下:

下面我们进行一些总结:

使用java编写的应用程序,他会调用同样使用java编写的AudioTrack,ava编写的AudioTrack他对C++实现AudioTrack的直接引用,C++实现的AudioTrack会夸进程使用AudioFlinger服务,然后这些数据通过厂家提供的HAL文件,去调用tinyalsa,最终发送给驱动。

08.音频系统:第002节_Android音频系统框架简述相关推荐

  1. 08.音频系统:第003课_Linux音频驱动程序:第002节_ASoC音频驱动框架

    通过上小节alsa音频驱动框架的分析,知道如果要去写一个声卡驱动,我们需要分配,设置,注册snd_card结构体: 定义一个struct snd_card *card; snd_card_new // ...

  2. 08.音频系统:第003课_Linux音频驱动程序:第001节_alsa音频驱动框架

    在上小节我们分析了Adndroid系统音频的框架,这么一个复杂的系统我们怎么去学习呢?我们从下往上学,先分析音频的驱动程序,看看linux系统中驱动程序是怎么编写的,他的结构是怎么样的,然后在琢磨Ti ...

  3. android多音频输出,基于Android车载系统的多路音频输出的方法、装置及系统与流程...

    本发明涉及Android车载系统领域,特别涉及一种基于Android车载系统的多路音频输出的方法.装置及系统. 背景技术: 车载系统主要由主机.显示屏.操作键盘(遥控器)和天线组成.它实现了野外踏勘. ...

  4. linux 音频文件切割_适用于 Linux 系统的 6 款最佳音频编辑软件

    适用于 Linux 系统的 6 款最佳音频编辑软件 无论你是专业的音乐制作人,还是只拿来剪辑剪辑音频,搞个手机铃声啥的,音频编辑软件总会派上用场.对于 Linux 系统而言,好用的音频编辑器就有很多款 ...

  5. 怎样打开计算机音频服务器,win7系统音频服务器怎么启动 win7电脑音频服务未启动解决方法...

    ‍‍‍‍‍ ‍电脑中的音频服务对于不少用户来说是不可缺少的,最近有用户发现自己电脑的音频服务未运行,那么win7系统音频服务器怎么启动?下面就将具体的启动方法分享给大家.‍ 具体的解决方法: 1.Wi ...

  6. 《深入理解Android 5 源代码》——第1章,第1.2节剖析Android系统架构

    本节书摘来自异步社区<深入理解Android 5 源代码>一书中的第1章,第1.2节剖析Android系统架构,作者 李骏,更多章节内容可以访问云栖社区"异步社区"公众 ...

  7. ALSA-ASOC音频驱动框架简述

    ##ALSA-ASOC音频驱动框架简述 注意:本文只限于讲解ALSA-ASOC音频驱动框架,不深入到寄存器.时序等配置,文章有不足之处,日后逐渐完善补充 另外多谢两位前辈的博客,学到了很多,多谢. h ...

  8. 【音频分类与检测】PANNs:用于音频模式识别的大规模预训练音频神经网络

    文章目录 摘要 1.引言 2.音频标记系统 2.1 CNNs 2.2 ResNets 2.3 MobileNets 2.4 一维CNNs 3.Wavegram-CNN 系统 3.1 Wavegram- ...

  9. android蓝牙固件升级_AirPods Pro 如何升级固件开启「空间音频」?为何「空间音频」未生效?如何体验「空间音频」?...

    (。・∀・)ノ゙嗨,各位,一般来到这篇文章的都是新购买了 AirPods Pro 的同学,先恭喜你们和我一样拥有了最最适合 iPhone (iPad)的无线降噪耳机,这耳机真的太美妙了 没有购买的赶紧 ...

最新文章

  1. .net中窗体之间的数据交换总结
  2. 程序的格式框架语法元素的名称(Python)
  3. 空间统计分析_(案例)空间分析6.4江西省地级市社会经济统计分析
  4. JavaScript 中遍历对象的属性
  5. scrollview下拉刷新_SwiftUI之View Tree 实战3(下拉刷新)
  6. nodejs集成sqlite
  7. 哈里王子启动可持续旅行倡议 携程作为创始成员入选
  8. php能用大括号写数组,PHP7.4不再支持使用大括号访问数组以及字符串的偏移
  9. BZOJ2654 Tree
  10. Spring AOP介绍及源码分析
  11. ACL技术原理和实验(华为设备)
  12. 服务器给文件权限命令,chmod命令详细用法设置文件的权限
  13. 高效能人士的七个习惯的简要定义与架构图
  14. HTML让文字在图片上显示
  15. 居家装修这些细节一定得注意到
  16. 我国古代数学家张丘建在《算经》一书中曾提出过著名的“百钱买百鸡”问题,该问题叙述如下: 鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?
  17. 【短期】未来学习目标
  18. 【深度学习小常识】CPU(中央处理器)和GPU(图像处理器)的区别
  19. 『论文复现系列』3.Glove
  20. 菜鸟如何用Python将交互数据生成邻接矩阵(超详细)

热门文章

  1. 基于ZigBee的出租车调度系统
  2. 基于Cortex-A53内核Linux系统gec6818开发板的电子自助点餐设计
  3. Node.js Cannot find module 'xxx' 问题解决
  4. java宠物之王-龙灵传说_宠物之王龙灵传说闯关秘籍
  5. 2022年4月20日Python课堂考试复盘及课堂笔记之程序控制结构
  6. matlab用ifft,ifft(matlab中ifft是什么意思)
  7. sge安装 centos 安装 gridengine
  8. 从0到1 用腾讯云低代码开发一个问卷小程序(基于模版中心二开)
  9. 三、道阻且长之单例模式
  10. 沙漠 草原 湖泊 羊群 骆驼(2)