在之前的文章中,我们已经接触了两个重要的音频前处理模块 – 回声消除 AEC 和噪声抑制 ANS,它们分别解决了 RTC 场景下的回声、噪声问题,极大提升了用户的体验。至此,音频前处理三剑客中,就只剩下一位 – 音频自动增益控制 AGC(Automatic Gain Control)还没有介绍,今天我们就来认识一下它。
实际场景的音量问题和AGC的必要性
相较于回声和噪声,音量相关的问题似乎不怎么“严重”,如果排除播放端误操作的因素,实际场景中还会有哪些音量问题?什么情况下我们会有“需要调整音量”的想法呢?
情况一:音量太小,我们无法辨识具体的语音信息,甚至需要贴着扬声器、皱着眉头“聆听”。原因可能是讲话者距离麦克风过远,也可能是麦克风的采集音量就比较小;
情况二:音量太大,我们的耳朵遭受“痛击”,不得不对扬声器“敬而远之”。原因可能是讲话者距离麦克风过近、可能其说话本身就比较“用力”。
情况三:音量忽大忽小,一段语音里可能同时存在前述两个问题,音量起起伏伏、若即若离,对听众来说无疑也是一种”折磨”。
对于这些音量问题,除了让讲话者调整与麦克风的距离、自身说话的声音大小外,我们熟知且习惯的解决办法是:在采集端,调节麦克风的采集增益;在播放端,调节播放软件的音量条、或者设备扬声器的播放增益。
这些手动的操作,其实都还算得上立竿见影。这么一看,既然动动手就可以自行解决,音量问题貌似的确不是什么大问题,为什么还需要自动增益控制呢?
我们需要意识到,“动动手”这种被动的音量调节方式,虽然有一定效果,但“不够便捷”,也“众口难调”。实际场景中,环境复杂多变:说话者不同则声音的原始音量有差异,说话者距离麦克风远近不同则声音传播的衰减有差异,麦克风设备不同则采集的增益有差异。
这些差异,使得一次“手动调节”很难适应采集环境的动态变化,如果场景中存在多个用户使用同一个麦克风的情况,更难一一兼顾。对于不熟悉设备系统的用户来说,如何调节设备采集增益、调节到多少合适或许都是“不可能完成的任务”(你知道如何调节PC端的麦克风增益吗?)。如果只依赖于手动调节,尤其是频繁的手动调节,势必会给用户带来负担,影响体验,对于产品设计来说也不够“优雅”。
此时,一个智能的音量调节机制的必要性就体现出来了。
AGC 针对上述情况,会自动调节采集端的音量“增益补偿”。简单来说,如果讲话者的声音过大, AGC 会自动降低增益;反之,会自动提高增益,以确保音量维持在一个比较稳定的水平。这个过程,用户无需频繁操作设备,就能避免声音起伏导致的不良体验,可以专注于 RTC 的音视频交互。
了解了常见的音量问题,以及 AGC 在解决这些问题上的优势,大家应该能领会到 AGC 存在的合理性和必要性,是时候再进一步了解下其中的技术点了。所谓“音量自动增益控制”,想要做具体了解,我们不妨把它拆解一下,逐个击破:
- 什么是“音量”?
- 音量“增益”的本质是什么?
- AGC进行音量增益“自动控制”的策略是什么?
我们接下来就一一解答这些问题。
什么是音量
在探讨 ANS、AEC 的文章中,我们都会先理清相应模块的处理对象,比如噪声是什么、回声是什么。所谓知己知彼,AGC 也不例外,我们需要先知道:究竟什么是音量?
其实,在系列文章的第一讲 – 音频要素中,我们就接触了音量的概念,只不过使用的是另外一个名称:响度。
我们回忆一下响度的定义:“响亮、微弱,是对声音强弱的感觉描述,这种特征被称为响度。响度由发声体振动的幅度决定,当传播的距离相同时,振动幅度越大、则响度越大;相反,当振幅一定时,传播距离越远,响度越小,就是我们常说的“距离太远了,听不见”的原因。“音量、响度”描述的是声音的同一属性,从定义上来看,它们是人耳对声音强弱的“感受”,主要由声音振动的“幅度”决定。感受是一种“心理量”,无法被具体量化;而振幅是“物理量”,在音频采样位深为 16bit 时,其幅度取值为 [-32768,32767],范围非常大,不便于检测和计算(关于采样位深和幅度的概念,可参考系列文章的第一讲–音频要素–声音的采集与量化)。
为了简化表示,我们又引入其他计量标准来表示音量,常见的有“声压级”标准和“全分贝刻度”标准,二者使用的单位均为分贝(dB)。
分贝是一个对数单位, 用于表示两个相同单位物理量的比,所以它需要参考一个基准量来进行计算,基准量不同,得到的数值体系也不同:
- 声压级(SPL,Sound Pressure Levels):单位为 dBSPL。使用声压作为基准量,其基准值为 20 μPa (声音在空气中振动会引起大气压强的变化,也即“声压“,单位为 Pa 。20 μPa 是人耳在频率1KHz下能感知的最小声音,相当于三米外一只蚊子的声音)。我们把声压为 20 μPa 的音量记为 0 dBSPL,音量越大,声压级分贝越大。我们正常谈话聊天的声压级音量约为 40 ~ 60 dBSPL,如果音量达到 90dBSPL 以上会损伤听力,190 dBSPL 以上甚至会危及生命。常见的噪声等级划分,就使用了声压级参考系。
- 全分贝刻度(DFS,Decibels Full Scale):单位为dBFS。使用音频采样点的幅度值作为基准量。和声压级不同,全分贝刻度的基准值不是最小值,而是最大值。比如,对于采样位深为16bit的音频,音频采样点的最大振幅为32768,此时音量最大。我们取振幅 32768 作为基准量,对应全分贝刻度 0 dBFS,0 dBFS 也即全分贝刻度标准下的最大音量,除了最大音量外都是负值,16bit下的最小值为 -96 dBFS。数字设备、数字音频处理均使用全分贝刻度作为音量单位,AGC 处理也是如此。
通过上面的描述,大家对于“什么是音量?”,应该有了初步的认知,有兴趣的同学,还可以具体去了解不同音量标准的对数计算公式,有助于大家进一步理解“分贝”的概念。
下篇文章我们继续“音量自动增益控制“ 概念逐个击破的第二部分:音量“增益”的本质。
原创文章,作者:ZEGO即构科技,如若转载,请注明出处:https://market-blogs.zego.im/reports-technique/473/