音量“增益”的本质是什么
“增益”指的是放大一定倍数,音量“增益”简而言之就是将音量放大一定倍数。
我们已经知道,决定音量大小的物理量为“振幅”,如果能对“振幅”进行调节,其实也就调节了音量。所以,“将音量放大一定倍数”实际上是“将音频采样点的幅值放大一定倍数”,实现上就是将音频采样点的幅值乘上一个系数,系数小于 1,就是缩小幅值,大于 1 就是放大幅值。
需要注意的是,幅值的放大倍数和人耳的听觉感受并不统一,更不成线性关系。也就是说,幅值放大一倍,人耳的听感并没有相应的也放大一倍。针对这种涉及两个物理量比值的非线性关系,我们仍可以借助分贝来处理。
音频采样位深 16bit 下,振幅为 A1 的音频相对于振幅为 A2 的音频,其音量的增益为 :dB = 20 * log10(A1/A2)。
- 假设采样点幅值放大为2倍(A1/A2 = 2),则该声音被增益了 20*log10(2) ≈ 6dB
- 假设采样点幅值不变(A1/A2 = 1),则该声音被增益了 20*log10(1) = 0dB
- 假设采样点幅值缩小为1/2(A1/A2 = 1/2),则该声音增益了 20*log10(1/2) ≈ -6dB
若增益为正数,表示对音量做放大处理;反之增益为负数时,表示对音量做缩小处理;增益为 0dB 表示使用原始的音量(大家需要注意,虽然都是 0dB,但不要混淆 音量大小 和 音量增益)。使用 dB 来进行增益计算,就和使用全分贝刻度作为音量大小单位联系起来了。
ZEGO SDK 支持通过接口主动对采集/播放音量进行调节,为符合理解习惯,接口可选的设置值为 [0,200]。其中 [0,100] 对应 -40 ~ 0 dB 的增益,会缩小或保留原始音量; (100,200] 对应 0~12 dB 的增益,会放大音量,参考上面的公式,最高可将幅值放大4倍。
基于对音量增益本质的了解,我们进一步了解一下常见的音量增益途径:模拟增益和数字增益。两种增益途径的具体细节就不做展开,结合已知的基础知识,大家只需要简单了解如下:
- 模拟增益:调整连续模拟信号的波形幅度,一般依赖于设备系统接口,控制设备硬件的采集增益,调节系统采集音量
- 数字增益:调整离散数字信号的采样点幅值,不依赖于设备系统接口,不调节系统采集音量
一般来说,Windows 和 Mac 端普遍支持模拟增益调节,这些平台往往会采用模拟增益 + 数字增益结合的策略调节音量。其中 Windows 端因采集声卡种类繁多,有些声卡的采集音量极小,如果不做系统音量的模拟增益、直接做数字增益,可能会因精度不够,导致数字增益后音质不佳。而移动端(iOS、Android)、Linux 端一般没有调节系统采集音量的接口,无法进行模拟增益调节,只能依赖于数字增益。
当然,只有两种基本的增益方式是无法满足复杂多变的实际场景的,AGC 算法需要根据平台差异和实际需求,灵活选择/搭配上述两种方式,并以此作为基础进一步制定处理策略。
这也就是我们下篇文章分享的 AGC 概念逐个击破的第三部分内容:AGC 进行音量增益“自动控制”的策略是什么?
原创文章,作者:ZEGO即构科技,如若转载,请注明出处:https://market-blogs.zego.im/reports-technique/477/