您当前的位置: 首页 >  android
  • 3浏览

    0关注

    417博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

江南才尽,年少无知! 发布时间:2019-04-20 11:41:52 ,浏览量:3

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

在这里插入图片描述

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

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

关注
打赏
1592542134
查看更多评论
立即登录/注册

微信扫码登录

0.0439s