多媒体系统之音频的采集和播放(三)(1)


Machine是指某一款具体的产品,由此可以看出Machine几乎是不可重用的,每个Machine上的硬件实现可能都不一样,CPU不一样,Codec不一样,音频的输入、输出设备也不一样,Machine为CPU、Codec、输入输出设备提供了一个载体。Platform一般是指某一个SoC平台,只要指定了SoC,那么我们可以认为它会有一个对应的Platform,它只与SoC相关,与Machine无关,这样我们就可以把Platform抽象出来,使得同一款SoC不用做任何的改动,就可以用在不同的Machine中。Codec和Platform一样,是可重用的部件,同一个Codec可以被不同的Machine使用。

这三个模块都有相应的driver. Platform driver是cpu侧的音频驱动,主要由CPU芯片厂商负责编写,主要作用是完成音频数据的管理,通过CPU的数字音频接口(DAI)把音频数据传送给Codec进行处理,最终由Codec输出驱动耳机或者是喇叭的音信信号。在具体实现上,ASoC把Platform驱动分为两个部分:snd_soc_platform_driver和snd_soc_dai_driver。其中,platform_driver负责管理音频数据,把音频数据通过dma或其他操作传送至cpu dai中,dai_driver则主要完成cpu一侧的dai的参数配置,同时也会通过一定的途径把必要的dma等参数与snd_soc_platform_driver进行交互。

codec driver是codec芯片侧的音频驱动,主要由codec芯片厂商负责编写,主要作用在上面已说过。ASoC中的一个重要设计原则就是要求Codec驱动是平台无关的,它包含了一些音频的控件(Controls),音频接口,DAMP(动态音频电源管理)的定义和某些Codec IO功能。同platform driver一样,codec driver也分为两个部分:snd_soc_codec_driver和snd_soc_dai_driver,作用也同platform driver类似。

Machine driver主要是做产品的厂商编写(产品厂商会购买codec芯片CPU芯片做成一个能用的产品)。Machine驱动负责Platform和Codec之间的耦合以及部分和设备或板子特定的代码。

ALSA 在User space里以ALSA-Lib存在,即提供API给应用程序调用。应用时主要有两种模式:block & nonblock,可以根据应用场景选择合适的模式。

ALSA是个庞大复杂的子系统,网上关于ALSA的内容特别多,包括kernel space和user space的,这里就不多叙述了。

2、Android

Android是基于linux的,即用的是linux的核,所以在音频驱动部分跟linux是一样的。不同的是在user space 部分不再用 ALSA-lib, 取而代之的是tinyalsa, 它是ALSA-Lib的裁剪。同时Android在Native层有media framework, 音频相关的模块有 AudioRecord/AudioTrack/AudioFlinger等,它们有层次关系,从上往下调用最终会调用tinyalsa的API跟kernel交互。

如果从事的是音频类的APP开发,kernel以及media framework都是不可见的,他们可以调用JAVA层提供的API实现音频功能,但这样会存在JAVA层和Native层之间的音频数据拷贝,效率较低,尤其是在实时通信类APP中。建议使用 Android NDK 提供的 OpenSL ES API 接口,它支持在 native 层直接处理音频数据。OpenSL ES 调用Native层media framework中的AudioRecord/AudioTrack, 从而实现音频数据的采集和播放,这样音频数据就不会到JAVA层了,效率较高。JAVA层跟Native层主要通过JNI实现一些控制功能。

原文链接https://www.cnblogs.com/talkaudiodev/p/7353920.html

阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/474380680

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

最后

今天关于面试的分享就到这里,还是那句话,有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。

最后在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

【算法合集】

【延伸Android必备知识点】

【Android部分高级架构视频学习资源】

**Android精讲视频领取学习后更加是如虎添翼!**进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

点击传送门即可获取!**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值