这篇文章的话题写的有点大,也允许作者用足够多的时间来完善这篇文章,同时也欢迎各位读者留言探讨不同的观点,真正让这篇文章帮助到有需要的人 … 同时欢迎您留言加群(或者到主页查看左边沟通交流模块),加入我们的群组,可以与同行进行交流,进而拓宽自己的知识视野。
音频在系统中发挥着巨大的作用,比如Speaker、蓝牙音乐、蓝牙电话、USB声卡、语音唤醒和识别、MIC阵列等,都需要音频来做支撑,而Linux 和Android 的实现方式差异很大,但又存在着联系,这些模块综合起来起来确是比较复杂,本文只是能够带你入门了解这个行业以及相关的知识点,但是还不能够深入浅出的讲解清楚某些概念,同时这也是接下来要去做的事情,希望读者耐心等待。
因此本文主要适用于想转行音频开发的同学,以及想系统的了解下音频行业的同学。
随着智能语音以及远程办公的需求,音频领域的场景越来越越广,比如远程办公开会的腾讯会议、飞书都可以看到音频的场景,还有智能硬件的小爱同学等都是音频的典型的应用场景,用音频形容这个行业有点太广义,这里引入一个更加专业的词汇《声学》。
首先了解什么是声学 ?通俗的讲解声学就是研究声音的一门学科,一切和声音有关联的东西,都在声学研究的范围之内。从各种不同的设备发出的声音,经过各种传播,被耳朵听到,这一系列流程中的每个环节都和声学有关系。 这篇文章介绍的通俗易懂,详细的可以看下。什么是声学?
文章中提到的著名的“声学之轮”了解一下,可以看到涉及到不同领域。
接下来通过这个视频的介绍针对声音有个清楚的认识,开始本文的介绍之旅。
市场岗位因需求而细分。主要分为以下三类 :
- 声学工程师:涉及声学的器件 听音 声学结构 仿真 硬件 等领域
- 音频工程师:涉及音频的驱动 音频应用开发 DSP开发 等音频应用层开发
- 算法工程师:涉及其中一个方向是通话和录音,主要的算法音频3A、降噪、声源定位、 盲源分离、去混响等算法的调优,另外一个是音效与声场技术:主要包括音效算法、声场校准与重建、空间音频等领域
目前市场上做音频开发的公司还是比较多,很多企业都需要音频方向的工程师,根据方向主要分为以下三类 : - 第一类是互联网公司,这类公司的主要覆盖的行业有: 会议、游戏、直播、通信等,代表的公司有腾讯、阿里、字节、Zoom,典型产品有腾讯会议,飞书会议等
- 第二类是智能硬件公司,这类公司主要覆盖的行业有:手机、音箱、TWS耳机、车载座舱、音视频硬件。代表的公司手机厂商: OV、小米、华为,还有相关的耳机和音箱硬件厂商:歌尔、哈曼等,最重要的还有车厂:蔚来、小鹏、理想,典型的产品有各品牌手机上的语音助手、小爱音箱、细嫩新能源车、耳机、音箱
- 第三类是芯片公司,这类公司就是属于半导体行业,针对的是主芯片中带有音频模块的(Codec), 这类公司对音频的技术要求最高,代表的公司主要有 : 高通,新思科技,国内的海思和展讯 还有全志、Rockchip 、恒玄 这是属于CPU厂商的,还有专门做音频芯片的公司,比如TI 、上海傅里叶半导体 是属于专门做音频芯片的,还有专门做DSP的, 典型的芯片有 : 全志 R329 、TI TAS5805
比如针对语音专用的芯片R329,针对音频提供了非常多的接口,还有专门处理音频的DSP 、NPU,这样的芯片设计就是专门针对音频领域的,让产品设计更加简单,成本更低,缩短开发周期,而且功能更加强大。
以上针对音频行业非常宽泛的分为了三类,涉及的领域非常广,既有半导体、互联网大厂(BAT / TMD)、新能源车厂(蔚小理) 、手机厂商等足以看到里面的市场和岗位机会,虽然需求很多,但是岗位招聘的人数并不多,却对工程师的水平要求比较高,音频工程师是靠在实际项目中去积累经验的,很多音频的调试和仿真都需要时间去积累。技术升级路线是比较陡峭的,越陡峭的学习路线其实越利于未来的职业发展,建立很强的职业堡垒,不容易被人替代的。
从上面三个维度可以分析,音频领域是一个从底层嵌入式到互联网领域的跨度,而且市场接下来有非常大的机会,比如新能源车的车载座舱都是不错的方向。
通过前面的描述了解了行业知识以及岗位情况,接下来需要解决的问题就是岗位所需要的知识点如何学习呢 ? 这里针对嵌入式音频岗位做进一步的说明,单纯的讲解需要看什么书籍比较枯燥,这里结合市场的实际情况分析岗位背后所需要的知识点。
这个截图是最近在BOSS直聘搜索🔍关键字音频 找到的针对嵌入式音频领域典型的岗位,看介绍应该是某手机厂商招聘的Android音频驱动工程师。
BOSS直聘-高级音频驱动工程师
岗位职责代表你入职之后的工作内容,任职资格代表你的技术栈方向是否符合。我们先从任职资格一步一步剖析所需要的技术栈,
Q1: 具有Linux 系统音频底层驱动开发经验 ?
这里重点强调的应该是Linux音频驱动开发,指的是Linux ALSA Driver的熟练应用 ,这里进一步解释一下,Linux系统是一个很庞大的框架,针对相关的硬件进行了很好的抽象化处理。 硬件中涉及到音频组件的,比如麦克风 扬声器 都是通过ALSA 音频框架来管理的, 硬件中涉及到摄像头 是通过另外的V4L2 框架来管理的,可以看到这张图片是Android系统的框图,截取其中的一部分
Q2: 有Smart PA Codec 耳机识别等音频器件开发调试经验?
先解释一下两个专有名词:
- Smart PA : 代表智能功率放大器,意思是在PA信号输出端加入了I/V反馈,实时检测喇叭,从而让喇叭工作在其极限状态,最大限度地发挥喇叭性能,就叫Smart PA,主要在手机中应用。 科普篇-智能功放到底是什么?
- Codec :代表编码解码器,这里上下文的意思指的是系统中的功放、喇叭的意思,比如PCM音频数据通过CPU的I2S音频总线传递给Codec, 这里经过AD采样 转化 放大 一些列处理驱动扬声器🔉发出声音
这点描述的主要就是基于Linux ALSA 适配过各种音频驱动,比如TI TAS5805 相关的音频驱动,针对一个系统,音频播放是前提,每个项目刚开始都是必须的工作,通过也会遇到不少问题,比如刚开始硬件电路设计问题导致音频Codec无法正常工作,还有就是kernel audio driver 的一系列细节,都是需要掌握的。
Q3: 熟悉ALSA/ ASOC/DAPM等音频驱动软件架构?
这个是音频驱动的重点,先来解释下专有名词
- ALSA : ALSA是Advanced Linux Sound Architecture的缩写,高级Linux声音架构的简称,它在Linux操作系统上提供了音频和MIDI(Musical Instrument Digital Interface,音乐设备数字化接口)的支持
- ASOC : ASoC框架是一种linux系统声卡驱动框架,是针对嵌入式设备在linux ALSA声卡驱动框架基础上进行了一层封装,意在将声卡和cpu两部分的控制代码分离开来
- DAPM : DAPM是Dynamic Audio Power Management的缩写,直译过来就是动态音频电源管理的意思,DAPM是为了使基于linux的移动设备上的音频子系统,在任何时候都工作在最小功耗状态下。DAPM对用户空间的应用程序来说是透明的,所有与电源相关的开关都在ASoc core中完成。用户空间的应用程序无需对代码做出修改,也无需重新编译,DAPM根据当前激活的音频流(playback/capture)和声卡中的mixer等的配置来决定那些音频控件的电源开关被打开或关闭。
这三个专有名词涵盖了Kernel Audio Driver 的精髓,也是每个音频岗位必备的技能。
Q4: 或者具有Android系统音频服务框架、audioflinger、audiopolicy、音量控制等模块的开发经验?
这点主要是针对Android Audio 音频岗位的,由于Android 是谷歌开源的,由一套Android 自己的音频框架。 可以看下Android Auido 的关系,其实是非常复杂的,这部分也是一个难点
图片来自于Android Audio 软硬件概念框图
Q5 : 有高通平台手机开发者优先?
或者描述成 有Qcom&MTK平台手机音频开发经验者优先 更好。
这里为什么要特别强调Qcom&MTK平台,主要是这两家是手机芯片的主要供应商,而且内部的音频通路都是比较复杂的,很多是属于厂商在Audio HAL层面处理的,所以这部分由这方面的经验会更好。 因为每家厂商的Audio HAL层实现的方式都有一些不同的差异。
这个MTK芯片内部的音频通路,这个还是比较简单的芯片,如果是手机 MTK Soc,内部的音频通路会更多.
以上的5点基本包括了岗位所需要的大部分知识点,这里基于以上基础在补充一些基础点
Q6:有一定的硬件电路基础,了解基本的硬件电路设计原理,可以看懂硬件电路 芯片手册等 ?
这个点主要是在前期适配Kernel Audio Driver所需要的知识点,能够看懂硬件电路,以及熟悉相关音频数字总线,比如I2S、PCM、TDM、PDM 数字接口,还有常用的I2C、SPI通讯接口,这些都是基础知识点,比如一款新的产品开发,前期嵌入式音频工程师需要适配一款新的音频驱动(Codec Driver), 这个总结的一系列步骤,可以看到这其中很大一部分需要熟悉硬件相关的操作。
Q7: 有Tensilica HiFi3、HiFi4 DSP相关开发经验优先?
市场的需求是一直不断变化的,一款通用的SOC肯定不能够适用所有领域,比如一款低功耗的音频设备,通用SOC已经不能够很好的适用于计算量和低功耗的要求。这个时候Tensilica HiFi DSP系列处理器就很满足市场需求,应运而生,通用的Soc内部在集成一个HiFi4 DSP核用于音频处理这种异构芯片接下来各大芯片厂商的风向标,比如Allwinner R329芯片,性价比就非常高,其中的 Tensilica HiFi 4 DSP就是用来跑语音算法的,非常高效,因为是不同的处理器架构,所以就需要不同的编译环境进行开发。
Q8: 掌握信号系统、数字电路、计算机原理、操作系统等知识,具备扎实的数据结构和算法基础知识。
这一点是很重要的基础知识同时也是能够决定你未来的职业生涯的发展,所以一定要重视基础知识。其中还有一点就是编程语言C、C++能够熟练的掌握,这完全是两门不同的语言奥,C++和C差异很大的,如果有精力可以学习下Matlab、Python,可以绝大的提升你的认知和工作效率。 比如Matlab AudioToolbox 这个工具箱好处就是更加聚焦和高效,比如前期调研阶段实现音频的数据读取和直观的显示,用Matlab 可能几行代码就实现了,如果用C语言的可能还没开始研究具体的问题,过程先把人折腾的不行。
一步一步分析完任职资格,可以发现职位描述就是一一对应的,岗位完全能够胜任的。
上面这个框图把音频系统需要的知识框架分为五层,就像爬楼梯一样,一层一层的走上去,最终才能达到所需要的终点,而且每一层看到的风景是不一样的,比如目前的知识栈在第二层,工作内容主要是和内核以及硬件打交道,如果提升到第三层,就是不一样的天地,就涉及到应用和驱动层的交互,也可以研究音频的数据怎么传递到驱动层,不同格式的音频数据是怎么重采样转换的等,可以感觉到知识点一下子就拓宽了许多。你看公司的每条的产品线,会有 低端、中端、高端,而且要拓展市场份额,必须要全线覆盖,意味着产品线越多,市场份额以及品牌力度、受众人员不同,低端可以不赚钱,但是知名度高,慢慢的中端产片切入市场,人们需要更好的体验,慢慢就转向购买中端以及高端产品,这样的思维方式也可以体现在学习知识。
针对一个行业的知识框架很重要,从上到下涉及到的相关点都需要了解清楚,这样基础才能越打越牢。学习音频不要把自己局限在嵌入式音频领域,更应该以全栈的思维去看待问题。
- 第1层 基础知识
基础知识的牢固决定你未来技术职业生涯的多远,理论基础是音频学习的开始点,同时也是决定你未来能够走多远的决定性因素,俗话说万丈高楼平地起,要把基础打牢。解决了一个问题之后一定要多问为什么,这样知识点才能越挖越深。
数字电路以及模拟电路应该是大学里课程,整理就不展开讲解了。主要聊聊信号处理,这个是偏理论的,前期学习起来比较枯燥,但确实是踏上高手的毕竟之路。知乎里这个回答基本涵盖了学习路线,回答这个的相关人员都是领域中的佼佼者,很有参考价值的。
曾经的我毕业之后闯荡职场江湖,修炼各种武功技能,只求速成,不修炼内功心法,只练习花里胡哨的武功招式,这样练出来的高手能高到哪里去 ? 何不静下心来,打好基础修炼好技能,领悟武学技能的真谛。 现在的职场就像是士兵突击中的成才和许三多的扮演者,一出场,就像在一个起跑线上的乌龟和兔子一样,似乎高下立判。用伍班副的话说,一个精得像鬼,一个笨得像猪。都不怎么招人喜欢。相对于许三多的迟钝木讷死心眼儿不开窍,成材就是他的另一个极端。学东西快,素质技能都拔尖,会来事儿,也懂得计算得失趋利避害。
虽然他比许三多跑的快,却也比许三多跌得重。在技术路线这条路线上道理也是一样的,需要下的是死工夫。而不是一味的用现成的框架完成任务即可,因为好用抽象化高的开源框架正在一步一步替代掉重复板砖的人员,真正需要的是有技术沉淀和懂驾驭的人员。