问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Android 10.0 CarAudioService(二)

发布网友 发布时间:2022-11-10 05:03

我来回答

1个回答

热心网友 时间:2023-11-23 23:40

前言
1.CarAudioService启动之后调用init()
2.在init函数中通过AudioManager.getDevice获取了所有的用于输出的Device,然后把这些device中type是BUS的过滤出来
3.然后调用setupDynamicRouting,这个方法是设置动态路由,前面我们分析了setupDynamicRouting的CarAudioZone部分,接下来,我们分析CarAudioDynamicRouting()

1. CarAudioDynamicRouting()
首先看构造函数,很简单,只是把前面构建的carAudioZones保存下来

2. setupAudioDynamicRouting()
我们进入dynamicRouting.setupAudioDynamicRouting(builder);来看看。
两个for循环,外层是mCarAudioZones的循环,我们看内层循环,在上一章节中分析道每一个zone都包含多个CarVolumeGroup,在这里我们拿AudioPolicy的builder和CarVolumeGroup传递给setupAudioDynamicRoutingForGroup(),接下来我们需要分析setupAudioDynamicRoutingForGroup()

2.1 setupAudioDynamicRoutingForGroup()
最外层是一个for循环,首先拿到CarVolumeGroup的busNumber,然后根据busNumber拿到CarAudioDeviceInfo ,拿到CarAudioDeviceInfo 之后,构建AudioFormat 和AudioMixingRule,然后进入第二层for循环,根据busNumber拿到 contextNumber,然后根据contextNumber获取到usages数组,拿到usage之后,便可以mixingRuleBuilder.addRule()

我们简单总结一下,首先通过传入的mCarAudioZone遍历其中的每个CarAudioZone,每个CarAudioZone又包含一个CarVolumeGroup的集合,遍历CarVolumeGroup里面的每个group,每个group又包含了一个device的集合(contextNumber和busNumber组成的map),这样我们可以通过busNumber获取到contextNumber,又可以根据contextNumber获取到usages数组,其实归根结底,我们就是把AudioAttribute的usage数组和context以及CarAudioDeviceInfo都关联起来。
AudioMix包含了有usage数组的mixingRuleBuilder和AudioDeviceInfo,这样device与usage数组便对应到一起,在原生的Android里面是通过stream在AudioPolicyManager的Engine中选择device,但是Car的这套逻辑是通过usage和device在上层就配好了,最后addMix就是将audioMix传递到AudioPolicy中,然后通过AudioManager.registerAudioPolicy(mAudioPolicy)注册下去。

热心网友 时间:2023-11-23 23:40

前言
1.CarAudioService启动之后调用init()
2.在init函数中通过AudioManager.getDevice获取了所有的用于输出的Device,然后把这些device中type是BUS的过滤出来
3.然后调用setupDynamicRouting,这个方法是设置动态路由,前面我们分析了setupDynamicRouting的CarAudioZone部分,接下来,我们分析CarAudioDynamicRouting()

1. CarAudioDynamicRouting()
首先看构造函数,很简单,只是把前面构建的carAudioZones保存下来

2. setupAudioDynamicRouting()
我们进入dynamicRouting.setupAudioDynamicRouting(builder);来看看。
两个for循环,外层是mCarAudioZones的循环,我们看内层循环,在上一章节中分析道每一个zone都包含多个CarVolumeGroup,在这里我们拿AudioPolicy的builder和CarVolumeGroup传递给setupAudioDynamicRoutingForGroup(),接下来我们需要分析setupAudioDynamicRoutingForGroup()

2.1 setupAudioDynamicRoutingForGroup()
最外层是一个for循环,首先拿到CarVolumeGroup的busNumber,然后根据busNumber拿到CarAudioDeviceInfo ,拿到CarAudioDeviceInfo 之后,构建AudioFormat 和AudioMixingRule,然后进入第二层for循环,根据busNumber拿到 contextNumber,然后根据contextNumber获取到usages数组,拿到usage之后,便可以mixingRuleBuilder.addRule()

我们简单总结一下,首先通过传入的mCarAudioZone遍历其中的每个CarAudioZone,每个CarAudioZone又包含一个CarVolumeGroup的集合,遍历CarVolumeGroup里面的每个group,每个group又包含了一个device的集合(contextNumber和busNumber组成的map),这样我们可以通过busNumber获取到contextNumber,又可以根据contextNumber获取到usages数组,其实归根结底,我们就是把AudioAttribute的usage数组和context以及CarAudioDeviceInfo都关联起来。
AudioMix包含了有usage数组的mixingRuleBuilder和AudioDeviceInfo,这样device与usage数组便对应到一起,在原生的Android里面是通过stream在AudioPolicyManager的Engine中选择device,但是Car的这套逻辑是通过usage和device在上层就配好了,最后addMix就是将audioMix传递到AudioPolicy中,然后通过AudioManager.registerAudioPolicy(mAudioPolicy)注册下去。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
怎么网页突然自动关闭 网页为什么会突然自动关闭 网页自动关闭什么原因 怎么在微信里面自己组建群聊 门开在东南角,北面中间有窗,办公桌如何摆放 请推荐一款app导航系统,地图信息准确,界面友好,主要用于在境外... 急求一款app导航系统,地图信息准确,界面别太多杂乱的东西,主要用在境外... 欠了闪银3600,逾期125天,今天算了下,差不多要还6000,不还会怎么样?_百 ... 怎么进出口货物老被查验,难道被盯上了?海关是如何查验的,海关查验... 来料加工海关会查什么 外贸知识:海关查验详解 ios里audiomix类属于哪个库 星空卫视在哪个卫星上 戴尔笔记本怎么样08167 江苏体育彩08167期开奖号码 营业收入和利润的区别在哪里呢? 《知否》中为什么盛老太太一出面,梁家就同意了墨兰婚事? 点胶工艺环保需要注意什么 草莓约怎么提现 调酒师的月薪一般为多少? 调酒师的工资待遇怎么样? 奥迪a6l巡航定速怎么用 海信“凶猛” 为什么他能成为南非第一彩电品牌? 理屈词穷中的穷是什么意思 怎么理解理屈词穷中的穷的意思 ()屈()穷 卡萨帝冰箱551的窖藏是什么意思 做一个真正的好男人必读的13条句子 一个人好不好从哪里看出来 被导师夸在专业方面是个好苗子,这是啥意思? 上海机场防爆安检跟上海地铁安检那个好 告诉我什么叫自在 我是大一计算机技术与科学的学生,想要以后进入微软工作,需要考取什么证书和做那些准备工作!希望专业 土豆番茄炖牛腩简单做法 土豆番茄炖牛腩怎么做 为什么QQ发图片一直显示处理中? 阅读 PDF 是, 每当看下一页时,为什么 老是出现正在处理图像, 就要等---- 探路蜂强光手电筒怎么样? 亚干是什么意思 荆轲刺秦的故事家喻户晓,历史上还有哪些人物可以和荆轲相提并论? 姜可可以在哪里看 扁鹊见蔡桓公,是否真实历史事件? 梦见蒜头是什么意思有什么预兆 董文华还活着吗? 功率的英文字母怎么写董文华到底死了吗? 云南北大青鸟设计培训告诉你零基础学习哪种编程语言比较好? 北大青鸟java培训:网站开发用什么语言最好呢? 桂林漓江客栈的三房一厅一卫是什么概念?“三房”是指三间卧室?四个人可以住对吗? 青年旅行团33人到宾馆住宿,分住3人间和2人间(每个房间不能有空床位),共有多少种不同的安排方法?分别是哪 我想寄手机从广州到泰国曼谷的,数量十几台到几十台,想请问一下选择哪间快递公司好点? 360n7可以登陆两个吗 我想做个业务员,需要学什么专业呢? 以后想做外贸业务员大学要学什么专业?