前面学习了,也转载了挺多大神写的 Audio 文章,学习了比较久,
但看别人的文章终究学习的还是别人的思想,终究还只是看懂了,
估计不久后马上也会忘记,所以一定要自已进入代码,一句一句代码的学习分析,
结合代码,结合自已的理解,如果自已能够写出一篇文章来,才能说明真正懂了。
本文也是一个边学边写的过程,加油!
一、学习思路介绍
先摘抄一张大神画的图(来自:http://zhoujinjian.cc/categories/Android/)
图画的很好很全,接下来,我们就结合这张图来说下,我自已理解的更好的学习 Audio 的思路。
1.1 自我理解
从图中可以看出,从上层到底层:
-
Application 层
对应着具体的 app 软件,其主要是使用 Framwork 层提供的接口来实现具体的auido 实现。
后面,我们会单独写一章来描述如何写一个音乐播放器 apk 《理解 Audio 音频系统六 之 Audio音乐播放器编写》。 -
Framework 层 / Libraries 库文件
在Framework层中,
主要 AudioTrack、AudioRecord、MediaRecorder、MediaPlayer 这四分别是可以对 Audio 进行播放 或者 采集。
AudioSystem 、AudioManager 主要是对音点策略的管理 -
Hal 层
主要包含 AudioFlinger,AudioPolicyService 。
AudioPolicyService是策略的制定者及设定相关的参数,AudioFlinger 负责根据 AudioPolicy设定的策略进行执行。
所以,我们先来学习的就是 AudioPolicyService ,后续会更新文章:《理解 Audio 音频系统二 之 AudioPolicyService》
既然AudioFliner 是执行者,在懂了 AudioPolicy 后再学,可以后相对好理解一些:《理解 Audio 音频系统三 之 AudioFlinger》 -
Tinyalsa 层
在Tinyalsa 中主要是包含了一些可执行程序,如 tinymix,tinyplay,tinycap 等。
《理解 Audio 音频系统四 之 Tinymix》
《理解 Audio 音频系统五 之 Audio Hardware 层实现》 -
Kernel 层
在Kernel 层中,主要是 ASOC 和 DAPM。
在 ASOC 中包含了 Platform,Codec,Machine 这三大部驱动。
DAPM 中主要是对 Audio Kcontrol 的一些控件的电源管理方面。一来就是直接学习Kernel 的结构体,很容易让人真接望而却步,
因此,这里,Kernel 我打算放最后来写,先从上层开始学起,学会怎么用后,再来学习到底原理是啥。
《理解 Audio 音频系统七 之 ASOC》 和 《理解 Audio 音频系统八 之 DAPM》
1.2 小结
终上,打算写如下文章,也希望自已能够坚持下来:、
《理解 Audio 音频系统一 之 Audio 学习思路》
《理解 Audio 音频系统二 之 AudioPolicyService》
《理解 Audio 音频系统三 之 AudioFlinger》
《理解 Audio 音频系统四 之 Tinymix》
《理解 Audio 音频系统五 之 Audio Hardware 层实现》
《理解 Audio 音频系统六 之 Audio音乐播放器编写》
《理解 Audio 音频系统七 之 ASOC》
《理解 Audio 音频系统八 之 DAPM》
参考资料
转载:https://blog.csdn.net/Ciellee/article/details/101856220