[音频] 定位及解决削波失真(爆音)问题

Why:为什么要解决削波失真问题?

对于直播产品来说,核心的用户体验是流畅接受直播画面信息和音频信息。即,作为用户,用户需要舒适地看到主播的画面,听到主播讲的内容。至于爆音,直接影响用户体验,因此需要在整个直播过程中及时定位和响应爆音问题。本文梳理了整个popping问题的定位,并提出了相应的解决方案!

What:什么是削波失真,如何定位

用户反馈现象

  1. 直播过程中,主播大音量说话,用户会报爆音
  2. 在RTC相关业务功能触发后(RTC会调整系统麦克风音量),反馈有爆音现象

音频异常链接位置

音频处理中的音频异常发生在哪里?

首先,梳理一下整个语音处理流程,以及直播客户端在整个直播过程中对语音信号做了哪些处理。

  1. 部分语音处理过程摘自《语音信号处理》,整体结构图如下:
    [音频] 定位及解决削波失真(爆音)问题
  2. 对于直播客户端,涉及到上图中的紫色流程,详细音频处理如下:
    [音频] 定位及解决削波失真(爆音)问题
  3. 用户报告的爆音问题是音频经过混合编码后推送到流中。因此,需要确认导致音频异常的混音、降噪、麦克风收音的具体环节。首先,获取降噪和混音前的原始麦克风流数据。
  4. 根据现象是主播音量过高或者RTC相关业务触发将系统麦克风音量调至80左右后会有爆音问题;因此在直播间,保持sony麦克风输入电平,衰减电平保持不变的情况下;分别将麦克风采集音量调至55(当前直播间的默认配置),以及100分别对麦克风采集到的裸流进行分析。以下是对应的音频波形。(采样频率为44.1k,位深16,双声道)
    (1)RtAudio PCM 音量55
    [音频] 定位及解决削波失真(爆音)问题(2)RtAudio PCM 音量100
    [音频] 定位及解决削波失真(爆音)问题

不同的音频捕获方法是否有弹出问题?

通过播放采集到的裸流可以听出来麦克风音量设置为55音频正常、音量设置为100采集到的音频爆音;可以确认这个音频异常的问题与降噪以及后续的混音处理环节是无关的。那么这个问题有没有可能是直播客户端原有的音频采集导致的问题,因此后续分别使用Windows系统自带录音、Windows DirectSound以及WASAPI分别在麦克风音量设置为100进行音频采集,皆有爆音现象,
(1)下图为windows录音采集到的音频波形。(Windows 录音 PCM 音量100)
[音频] 定位及解决削波失真(爆音)问题

(2)又分别使用Windows DirectSound与 WASAPI分别在麦克风音量设置为100进行音频采集,皆有爆音现象,下图为对应波形。
[音频] 定位及解决削波失真(爆音)问题

(DirectSound PCM 音量100)
[音频] 定位及解决削波失真(爆音)问题

(WASAPI PCM 音量100)

如何区分正常音频和异常音频?

经过以上分析,可以得出以下结论:

  1. 音频异常在预处理和数字化过程中已经损坏,与降噪和混音无关。
  2. Windows Dsound以及WASAPI;原有的RtAudio音频自采,RTC音频采集,Windows录音皆有爆音问题。
  3. 所有弹出的音频波形都具有波形被削波的特点。

How:如何处理削波失真问题

根据以上原因分析,已经确认在语音信号的预处理和数字化过程中出现了音频异常;可以看出,所有的爆音波形都有一个共同的特点,就是削波失真。因此,popping问题的解决方案也很明确。

如何避免削波失真?

削波失真的原因

以下是百度百科的解释:削波失真的产生是由于每个电路和音频单元都有一定的动态,这是由电子电路的性质决定的。如果信号电平太强,则超出电路的允许范围(阈值)。信号不能顺利通过,波形被削波。削波信号进入扬声器后,其电流通过扬声器的音圈。由于削波信号中的直流分量不能使音圈运动,其电能不能转化为机械能,从而产生大量热能,导致音圈发热。如果削波失真非常严重,其直流电流比较大,可能会损坏扬声器高音,使单元音圈开裂、开裂或振动等严重损坏,使声音变形,损坏高音,有时甚至完全烧毁它。
简单概括就是输入语音信号过强造成的音频损坏。因此,有必要削弱输入的语音信号。整理后,有两种方法:

  1. sony无线麦克风支持动态设置射频输出电平以及音频输入的衰减电平;可以减小输入电平或增加衰减电平来解决问题
  2. 降低系统麦克风的采集音量和增益

音频的具体特点是什么?异常音频可以与某些特定的特征数据相关联吗?

在【音频异常链接定位】中,熟悉了正常音频和异常音频的波形,得出异常音频波形全部被削波失真的结论;然后我将展开查看波形以外的其他可以反映音频信息的数据。 .
[音频] 定位及解决削波失真(爆音)问题
区域一:该音频的振幅统计的详细信息:峰值幅度、采样值、RMS振幅等
区域二:音频左右声道波形
区域 3:音频的输入电平
当你第一次看到这三个区域时,你会有以下问题吗?

  1. 一般我们将人类可以忍受的声音是0分贝到70分贝,为什么这里的分贝值是负的?
  2. RMS振幅是什么?为什么要采用均方根?

分贝是什么?RMS振幅是什么?

什么是分贝?

  1. 分贝的定义:通常表示两个声音或电信号的功率或强度的相对差异的单位,相当于两个电平之比的常用对数的十倍;
    下面是一个简单的分贝计算推导:
    声音的响度 = 能量/(时间
    面积)由于能量比时间是功率,我们可以得到
    声音的响度 = 功率/面积 (瓦/㎡) 人类听力的响度范围为(.000000000001 瓦 /㎡——1 瓦 / ㎡);鉴于.000792710162 瓦 / ㎡与.000006288415 瓦 / ㎡的比较比较繁琐,所以引入了对数计算即:
    log (.000792710162) = -3.1 log (.000006288415) = -5.2
    这个差值2.1即是贝尔,分贝
    10以后:
    10
    log (.000792710162) = -31 10
    log (.000006288415) = -52
    再做差为21,这个21就是分贝,即 10 * log (.000792710162 / .000006288415) = 21 dB
  2. 有关分贝的名词有很多,例如dBSPL、dBu、dBV、dBm、dBVU、dBFS;通常我们讲到的”分贝“,即是dBSPL(Sound Pressure Levels)
    引入新的公式声响响(I)和声压§的关系: I = P²/ρ。
    根据(1)中得出的公式 dB = 10 * log (x / y) ,当x与y用声响作为测量单位的时候,将P²/ρ带入公式可得:
    dBSPL = 10
    log[ (Px^ / ρ) / (Py^ / ρ) ] = 20
    log(Px/Py) 。
    普通人能听到的声压范围为.00002帕斯卡——20帕斯卡,可以得出普通人能够忍受的分贝范围为:
    20 * log (.00002 Pa / .00002 Pa)——20 * log (20 Pa / .00002 Pa) ,即0dBSPL——120dBSPL;
    总结:根据1和2我们可以得出两个公式
    dB = 10 * log (x / y) —- 以声响作度量单位时计算分贝的公式,单位应该是 W / m² dB = 20 * log (x / y) —- 以声压作度量单位时计算分贝的公式,单位应该是 Pa
  3. dBFS(全分贝刻度),是一种为数字音频设备创立的分贝值表示方法。参照数是最大的一个,也就是说0dBFS是数字设备能够到达的最高响度水平。所以在音频分析工具中,峰值表的最高刻度都是0。
    数字音频,以16bit的位深为例,采样信号的最大值为65536,所以计算dBFS的公式为:
    dBFS = 20 * log (采样信号 / 65536)
    求得16bit位深的dBFS的区间为20 * log (1 / 65536)——20 * log (65536 / 65536),即-96 dBFS——0 dBFS
    因此也就解释了音频分析工具中的输入电平最大值为0,其余皆为负值的现象。

RMS振幅是什么?为什么采用均方根?

振幅即音量,RMS振幅表示音量的均方根。均方根值在物理上也称作为效值,它的计算方法是先平方、再平均、然后开方。RMS的意义是什么?
首先RMS是用来说明样本的离散程度。比如两组样本:
第一组有以下三个样本:3,4,5第二组有一下三个样本:2,4,6
虽然平均值都是4,但是第一组的三个数值相对更靠近平均值,也就是离散程度小。对应到我们要区分的音频特征:振幅上来讲:我们要能够区分一下两种波形的区别:
[音频] 定位及解决削波失真(爆音)问题
[音频] 定位及解决削波失真(爆音)问题
即连续几个采样点的音频幅度要足够接近数字音频的最大值,分散程度要小。避免因计算某一点的平均值过高而导致的错误。

直播端在得到裸音频流后如何计算音频的关键特征数据,从而进行相应的处理?

经过以上的分析了解了RMS振幅,下面就通过计算【问题定位】中的PCM数据的RMS振幅来校验我们是否能够通过RMS振幅来识别出爆音现象。
音频1:系统音量设置为55的PCM裸流。
音频2:系统音量设置为100的PCM裸流。
经过多次测试,我们将音频数据的每512字节设置为1帧,即每一帧计算出一个RMS振幅,观察数据变化。

  1. 音频1的RMS振幅曲线:
    [音频] 定位及解决削波失真(爆音)问题
  2. 音频2的RMS振幅曲线:
    [音频] 定位及解决削波失真(爆音)问题
    可以看出,异常音频的RMS振幅会有连续多个点在峰值位置,因此可以确定动态调整的策略:连续多个音频帧的RMS振幅在异常区间内,即有爆音现象,需要调低系统麦克风采集音量与增益。
    完成代碼编写后,随即在半身直播间进行测试。在不修改sony麦克风的输入电平与衰减电平的前提下,先将麦克风音量设置为100,随机观察音频的RMS振幅曲线与音频波形的变化。测试结果如下:
  3. RMS振幅的变化:[音频] 定位及解决削波失真(爆音)问题
  4. 音频波形变化:[音频] 定位及解决削波失真(爆音)问题

音频分析工具

【1】 Audacity
【2】Adobe Audition 2020

参考

【1】《语音信号处理》第一章、第二章、第三章
【2】《Android音视频开发》第一章
【3】什么是分贝?如何计算声音分贝?
【4】分贝是什么?
【5】音量与响度
【6】计算分贝值
【7】音频振幅
【8】均方根值一般在什么情况下取,有何意义?

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2022年3月23日
下一篇 2022年3月24日

相关推荐