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

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

在这里插入图片描述

但是该框图不够细致,为了大家更加详细的了解音频系统,存在如下框图:
在这里插入图片描述
后续我们将围绕这个框图进行讲解,我们先看看右边:
在右边的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如何播放,关闭,暂停?

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

  • 12
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江南才尽,年少无知!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值