08.音频系统:第002节_Android音频系统框架简述
该小节我们来讲解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音频系统框架简述相关推荐
- 08.音频系统:第003课_Linux音频驱动程序:第002节_ASoC音频驱动框架
通过上小节alsa音频驱动框架的分析,知道如果要去写一个声卡驱动,我们需要分配,设置,注册snd_card结构体: 定义一个struct snd_card *card; snd_card_new // ...
- 08.音频系统:第003课_Linux音频驱动程序:第001节_alsa音频驱动框架
在上小节我们分析了Adndroid系统音频的框架,这么一个复杂的系统我们怎么去学习呢?我们从下往上学,先分析音频的驱动程序,看看linux系统中驱动程序是怎么编写的,他的结构是怎么样的,然后在琢磨Ti ...
- android多音频输出,基于Android车载系统的多路音频输出的方法、装置及系统与流程...
本发明涉及Android车载系统领域,特别涉及一种基于Android车载系统的多路音频输出的方法.装置及系统. 背景技术: 车载系统主要由主机.显示屏.操作键盘(遥控器)和天线组成.它实现了野外踏勘. ...
- linux 音频文件切割_适用于 Linux 系统的 6 款最佳音频编辑软件
适用于 Linux 系统的 6 款最佳音频编辑软件 无论你是专业的音乐制作人,还是只拿来剪辑剪辑音频,搞个手机铃声啥的,音频编辑软件总会派上用场.对于 Linux 系统而言,好用的音频编辑器就有很多款 ...
- 怎样打开计算机音频服务器,win7系统音频服务器怎么启动 win7电脑音频服务未启动解决方法...
电脑中的音频服务对于不少用户来说是不可缺少的,最近有用户发现自己电脑的音频服务未运行,那么win7系统音频服务器怎么启动?下面就将具体的启动方法分享给大家. 具体的解决方法: 1.Wi ...
- 《深入理解Android 5 源代码》——第1章,第1.2节剖析Android系统架构
本节书摘来自异步社区<深入理解Android 5 源代码>一书中的第1章,第1.2节剖析Android系统架构,作者 李骏,更多章节内容可以访问云栖社区"异步社区"公众 ...
- ALSA-ASOC音频驱动框架简述
##ALSA-ASOC音频驱动框架简述 注意:本文只限于讲解ALSA-ASOC音频驱动框架,不深入到寄存器.时序等配置,文章有不足之处,日后逐渐完善补充 另外多谢两位前辈的博客,学到了很多,多谢. h ...
- 【音频分类与检测】PANNs:用于音频模式识别的大规模预训练音频神经网络
文章目录 摘要 1.引言 2.音频标记系统 2.1 CNNs 2.2 ResNets 2.3 MobileNets 2.4 一维CNNs 3.Wavegram-CNN 系统 3.1 Wavegram- ...
- android蓝牙固件升级_AirPods Pro 如何升级固件开启「空间音频」?为何「空间音频」未生效?如何体验「空间音频」?...
(。・∀・)ノ゙嗨,各位,一般来到这篇文章的都是新购买了 AirPods Pro 的同学,先恭喜你们和我一样拥有了最最适合 iPhone (iPad)的无线降噪耳机,这耳机真的太美妙了 没有购买的赶紧 ...
最新文章
- .net中窗体之间的数据交换总结
- 程序的格式框架语法元素的名称(Python)
- 空间统计分析_(案例)空间分析6.4江西省地级市社会经济统计分析
- JavaScript 中遍历对象的属性
- scrollview下拉刷新_SwiftUI之View Tree 实战3(下拉刷新)
- nodejs集成sqlite
- 哈里王子启动可持续旅行倡议 携程作为创始成员入选
- php能用大括号写数组,PHP7.4不再支持使用大括号访问数组以及字符串的偏移
- BZOJ2654 Tree
- Spring AOP介绍及源码分析
- ACL技术原理和实验(华为设备)
- 服务器给文件权限命令,chmod命令详细用法设置文件的权限
- 高效能人士的七个习惯的简要定义与架构图
- HTML让文字在图片上显示
- 居家装修这些细节一定得注意到
- 我国古代数学家张丘建在《算经》一书中曾提出过著名的“百钱买百鸡”问题,该问题叙述如下: 鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?
- 【短期】未来学习目标
- 【深度学习小常识】CPU(中央处理器)和GPU(图像处理器)的区别
- 『论文复现系列』3.Glove
- 菜鸟如何用Python将交互数据生成邻接矩阵(超详细)
热门文章
- 基于ZigBee的出租车调度系统
- 基于Cortex-A53内核Linux系统gec6818开发板的电子自助点餐设计
- Node.js Cannot find module 'xxx' 问题解决
- java宠物之王-龙灵传说_宠物之王龙灵传说闯关秘籍
- 2022年4月20日Python课堂考试复盘及课堂笔记之程序控制结构
- matlab用ifft,ifft(matlab中ifft是什么意思)
- sge安装 centos 安装 gridengine
- 从0到1 用腾讯云低代码开发一个问卷小程序(基于模版中心二开)
- 三、道阻且长之单例模式
- 沙漠 草原 湖泊 羊群 骆驼(2)