在音频系统第一课时的时候,有如下一副框图。围绕这下图讲解了音频系统的框架:

但是该框图不够细致,为了大家更加详细的了解音频系统,存在如下框图:

后续我们将围绕这个框图进行讲解,我们先看看右边:
在右边的AudioHAL下面的prmary_out,low_latency等等我们称其为output,一个output对应一个/多个设备节点(为什么是多个,我们后续进行分析),每一个output都有一个与其对应的线程(MixerThread),在其中可能存在一个或者对个track(音轨:声音的来源)。一个track对应一个AudioTrack(图示最左边)。

如prmary_out,在开发板上执行 ls dev/snd我们可以看到如下节点(controlC0 controlC1 controlC2 pcmC0D0c pcmC0D0p pcmC1D0p pcmC2D0p timer)

其中pcmC0D0p pcmC1D0p pcmC2D0p都属于prmary_out。为了避免麻烦,一个设备节点只有一个thread操作,

播放声音时,声音来源有多个(有多个APP提供声音),他们的声音封装在AudioTrack,由一个线程共同处理,这个线程中的mtracks挂有一个或者多个track。这些track与AudioTrack一一对应。其中APP与这个线程需要通过binder进行跨进程通信。

现在我们提几个问题:
1.MixerThread如何创建?我们知道MixerThread对应着某些设备。
AudioPolicyService是策划的制定者(如:声音时从喇叭播放,还是从耳机播放)
AudioFlinger是策略的执行者(如:打开某些写呗节点)
所以:AudioPolicyService根据配置文件使唤AudioFlinger创建Thread

2.Thread对应的output,output对应哪些节点。

3.AudioTrack和Track的创建过程:AudioTrack对应哪一个Thread,对应哪一个output。

4.AudioTrack如何传输数据给Thread?
AudioTrack如何播放,关闭,暂停?

通过学习后面的章节,我们能回到上述问题之后,我们对整个音频系统,就有比较深刻的印象了。

08.音频系统:第004课_Android音频系统详解:第001节_分析思路相关推荐

  1. 第10课:底实战详解使用Java开发Spark程序学习笔记

    第10课:底实战详解使用Java开发Spark程序学习笔记 本期内容: 1. 为什么要使用Java? 2. 使用Java开发Spark实战 3. 使用Java开发Spark的Local和Cluster ...

  2. 第8课:彻底实战详解使用IDE开发Spark程序--集群模式运行

    第8课:彻底实战详解使用IDE开发Spark程序--集群模式运行 拷贝WordCount.scala生成WordCountCluster.scala. 1. 将object WordCount改为ob ...

  3. Linux系统下ifconfig和route配置网络详解

    Linux系统下ifconfig和route配置网络详解 ifconfig和route合用于配置网络(ip命令综合二者功能,此处不讲),通常在前者设置好ip地址等信息后,采用route命令配置路由.( ...

  4. win7 64位操作系统中Oracle 11g + plsql安装教程详解(图解)

    这篇文章主要介绍了win7 64位操作系统中Oracle 11g + plsql安装教程详解(图解),详细的介绍了Oracle 11g 安装的步骤,有兴趣的可以了解一下. 先去网上把下面列表里的文件下 ...

  5. 系统批量运维管理器Fabric详解

    系统批量运维管理器Fabric详解 Fabrici 是基于python现实的SSH命令行工具,简化了SSH的应用程序部署及系统管理任务,它提供了系统基础的操作组件,可以实现本地或远程shell命令,包 ...

  6. Linux系统下SVN服务器的搭建过程详解 UpJ}s7+

    Linux系统下SVN服务器的搭建过程详解 UpJ}s7+   1 环境:  服务器放在redhatAS4.0上,客户端在windows 2000. k_lb"5z   Z]jSq@%1H* ...

  7. linux管道命令详解,Linux系统中的管道命令的用法详解

    Linux系统中管道命令是linux系统的一个强大之处.下面由学习啦小编为大家整理了Linux系统中的管道命令的用法详解的相关知识,希望对大家有帮助! Linux系统中的管道命令的用法详解 管道命令操 ...

  8. 金蝶云星空html5的网页主界面如何修改,金蝶云星空系统与嵌套网页进行交互实现详解...

    金蝶云星空系统与嵌套网页进行交互实现详解 一.应用场景: 嵌套网页与金蝶云星空进行数据交互,例如:在被嵌套网页中,点击一个按钮,需要把数据发送到金蝶云星空系统当中,并且,星空系统接收发过来的数据,同时 ...

  9. 申通快递:核心业务系统云原生化上云技术详解

    简介:如果说,快递行业上半场的竞争拼的是规模.服务乃至价格,进入下半场,快递企业们还需要比拼硬核的技术实力.--周金龙(遥方) 随着云计算的快速发展和成熟,越来越多的企业正在把自己的核心系统向云上迁移 ...

  10. #阿里云原生最佳实践# 申通快递:核心业务系统云原生化上云技术详解

    随着云计算的快速发展和成熟,越来越多的企业正在把自己的核心系统向云上迁移,从而享受云计算带来的技术红利.IDC发布的<全球云计算IT基础设施市场预测报告>显示:2019年全球云上的IT基础 ...

最新文章

  1. sql语句中having的作用是?
  2. Android Handler与Looper原理简析
  3. CTFshow 命令执行 web57
  4. UI组件之TextView及其子类(二)RadioButton和CheckBox
  5. 企业战略:前瞻性决定发展性
  6. db2 sql执行历史_5 个免费的在线 SQL 数据库环境,比Navicat 香!
  7. python借助missingno可视化分析缺失值
  8. 约瑟夫环问题(链表 + 公式)
  9. Umbrella Network与Linear Finance合作,将专业金融数据带入DeFi
  10. Android中对已安装应用的管理实现
  11. python的zip函数_python的zip函数
  12. Jnotify文件监控的用法以及Jar文件导入的方法
  13. mysql 中时间和日期函数应用
  14. 主机不可达和端口不可达
  15. 事业单位考试计算机专业知识题库,计算机考试题库:计算机考试练习题(29)...
  16. Java实现MySql分页查询
  17. iOS 增强现实教程:基于位置定位
  18. Google秘密入口
  19. 小学生C++趣味编程 2023 01 09 测试
  20. mysql 优化思路_Mysql优化思路

热门文章

  1. 30.STM32 DS18B20
  2. 该死的强迫症,教你stm32怎么把杜邦线弄整齐
  3. word论文公式加点
  4. fighter_zzh_Steam控制器,即将推出Linux的Street Fighter V以及更多开放式游戏新闻
  5. 引用腾讯地图时出现”鉴权失败,请传入正确的key“
  6. RFM用户分层模型|原理+Python全流程实现
  7. 区块链专题报告:区块链是计算机板块上行的催化剂
  8. JavaWeb过滤器分类
  9. Word上下标快捷键
  10. t480 拆触摸板_ThinkPad T480 如何关闭触摸板?