8.4.1Android音频系统详解_分析思路

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

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

后续我们将围绕这个框图进行讲解,我们先看看右边:
在右边的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如何播放,关闭,暂停?

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

发布了241 篇原创文章 · 获赞 28 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_34738528/article/details/104989224