金小音的音频系统开发-指南

最好的学习时机,要么是十年前,要么就是现在。金小音,专注Audio 11年!

大家好,我是金小音,自2013年毕业以来,10多年一直从事音频领域的研发工作,包括手机,车机等。最开始从手机音频驱动层(Kernel)做起,后面逐步涉及到HAL,Framework,APP基本是一路向上...而最近由于车机系统的兴起,我也逐步将开发工作转移到QNX Audio,ADSP算法集成等方向。记得前几年AI火热的时候我也想转个方向看看,但最终我还是坚持了最初的方向,始终如一死磕Audio到底。事实证明在新能源汽车发力的大背景下,Audio系统研发的市场还是非常巨大的,因为在行驶的汽车上,驾驶员对音频的需求绝对高于视频。下面介绍下一个音频系统研发人员一般要做的工作内容:

方向1: 音频驱动开发(Audio Driver Bringup),是这样的,如果初学者有机会进入音频研发领域最好从驱动层做起,这就好比盖楼房底层地基永远是最核心的,只有掌握很好的底层基础后面转方向到framework,hal,adsp都将是非常容易的,但是反过来一个搞App的人忽然遇到中年危机,想转Linux内核层研发...您认为可能吗?

在手机领域音频驱动开发,主要工作就是做一些codec,smartpa等的驱动集成,注意这里的"集成"二字,因为大部分情况这些芯片厂商都会给您提供好驱动文件的,从零开始自己写的,目前为止我还没有遇到过。当然想要很好的集成您需要熟练掌握Audio Kernel的ASOC框架,DAPM机制,设备树GPIO,I2C,I2S配置,最终通过示波器确认芯片正确被驱动起来,这些后面我都会重点讲解。

在车机领域玩儿法就完全不一样了,车机系统的底层一般是QNX系统,QNX上面运行的是Android虚拟机。车机的SOC将通过A2B总线,将音频数据传输给功放,所以一个驱动研发一般只需要会用一个叫做Sigma Studio的软件对A2B芯片(AD2428等)进行正确的通路链接,配置好A2B传输参数即可(具体参数一般来说功放厂商会提供的),虽然说只是在软件里连连线,但这并不代表很容易,后面将会详细说明。

万丈高楼平地起,如果您掌握了以上简单的audio bringup工作,下一步则需要更深入的研究什么是ASOC框架,DAPM机制,声卡注册流程等,什么是驱动的FE,BE(前端,后端),这样成为一个高级研发人员。

方向2:Audio HAL层开发,这部分的工作其实是比较模糊的,一般来说搞驱动的和搞framework都应该掌握这部分,因为HAL本来就是“承上启下”的。Audio HAL的作用就是音频通道的选择,然后承接fwk的数据下发给kernel层,当然也有在这里集成一些算法的。以上是HAL层初级研发必须掌握的,但是如果您想要做到高级,则需要对HAL层的音频参数有更加独特认知,比如出现杂音丢帧问题时,怎样调参?出现音频延迟过大时怎样调节参数?HAL层怎样给ADSP算法发控制指令?这写内容都是您对HAL音频数据传输有足够多的理解之后才能做到的。

另外这里要说明下,最新的高通Audio HAL已经改为AudioReach框架,新框架对比老框架改善了哪些部分,开发是更容易了还是更麻烦了?这些都是我们后续要做技术分享的。

方向3:Audio Framework,当您对音频驱动,HAL都掌握之后,您想要更上一层楼甚至做到音频全栈开发,这将是最关键的一道坎。首先fwk里会用到大量的java,c++代码,这会让一部分曾经做C的内核研发人员造成一定的学习困难。另外Framework层代码量将大幅度增加,这里将出现各种音频线程(Direct,Offload,Mixer,FastThread,Mmap,Duplicate,remote submix,等等等),音频服务的启动AudioPolicy,AudioFlinger,AudioClient,AudioService,AudioManager,AudioPatch机制,AudioFocus机制,AudioVolume,等等概念层出不穷,太多列举不过来。

如果您已经熟练掌握上述框架则可以成为一个初级研发人员,如果要成为高级则要掌握音频性能分析,如果在Framework出现杂音丢帧,您要做到精准定位(比如利用trace工具,dump工具),并且通过优化线程优先级,CPU绑定,音频参数调整,淡入淡出等方式解决问题,另外对于音频链路延迟的优化也是重点了,最后Google是经常在Framework层搞一些新玩法的比如空间音效,AAudio都需要时刻保持学习状态。

另外在汽车领域,其实这部分玩法也完全不一样了,汽车上主要会运行一个特殊的服务CarAudioService,这个服务接管了音频的大部分功能,包括注册外部路由,音频策略管理,音量管理等。以上功能都是本星球主要讲解的部分。

方向4: APP,如果您已经掌握了音频全栈开发,那么做一些简单的APP应该是不难了,毕竟走到这一步您使用的编程语言应该是全部了吧。。。为什么要学会一些APP开发??当您写的新功能需要测试时,当测试人员发现BUG需要复现问题时,我想自己写一个简单的APP是最便捷的方法。

方向5 : ADSP,这部分也是非常重要的,音频研发为什么需求是比较多的?当然是因为玩法多啊。这些玩法包括各种ECNR降噪算法集成,杜比环绕音效,全景声等等,这些算法如果一股脑全部在CPU上运行,那肯定会占用大量的运算资源。所以一般的玩法是集成到ADSP中运行,所以您需要掌握基于CAPIV2架构下封装第三方算法库,然后通过QACT等工具加载模块,通过QXDM工具分析算法运行效果等等。另外也要掌握GEF框架,这样才能让ADSP和CPU进行数据通信,下发控制指令。当然基于最新的AudioReach架构下,ADSP在算法集成上也有较大变化。

方向6:QNX Audio,随着新能源汽车的发展,汽车系统一般都是QNX+Android双系统了。QNX的优势是代码结构简单,功能安全高。所以汽车上比较重要的一些音频,比如说安全带警示,AVAS报警,ESE声浪,转向警示音都是在QNX里开发的。另外由于音频驱动也都是在QNX里运行的,所以一般也会涉及到一些硬件功能诊断的开发,通过can指令初始化音频功放等等。

随便讲了下大概,这些专业术语也不必在开篇中就想全部了解,后面都会进行系统性说明。Audio系统全栈开发,网上能找到的资源要么就是碎片化的,要么就是太老的,要么就是没有实战经验凭空撸代码的,要么就是不够深入的,对杂音稳定性问题束手无策。。。。本星球,就是要一一攻克音频各个难题,带您走向坦荡之路。

当然,考虑到学习门槛问题,本专题的讲解还是从,APP(简单) -> Framework (难) -> HAL(中等) -> Kernel (难) -> ADSP(中等) -> QNX Audio (中等),欢迎大家关注金小音,专注Audio 11年!

下面是我的音频专栏初步计划表,后面逐步迭代:

  • 28
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

金小音

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

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

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

打赏作者

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

抵扣说明:

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

余额充值