目录
1、声学背景知识
声音作为机械波的一种,频率和振幅是描述波的重要属性,频率的大小与我们通常所说的音高对应,而振幅影响声音的大小(音量)。声音可以被分解为不同频率不同强度正弦波的叠加,这个变换的过程就是傅立叶变换。声音总是包含一定的频率范围,人耳可以听到的声音的频率范围在20到2万赫兹之间。高于这个范围的波动是超声波,而低于这一范围的是次声波。
声波在遇到障碍物时,一部分声波会穿过障碍物,而另一部分声波会反射回来形成回声。回声相比那些直接传播的声音所经过的路程更长,所以会比直接传播的声音晚被听到。如果两列声波的时间间隔小于0.1秒,人耳边无法分辨,只能听到被延长的声音。因为室温(20℃)时空气中的声速是343米每秒,所以站在声源处的人要听到回声需要障碍物到声源的距离至少17米。
2、音频技术背景
2.1、音频基础概念
采样:
声波是无限光滑的,弦线其实由无数点组成,由于存储空间是相对有限的,数字编码过程中,必须对弦线的点进行采样,采样的过程就是抽取某点的频率值,光有频率信息是不够的,我们还必须获得该频率的能量值并量化,用于表示信号强度,总体音量得到明显的提升。
采样频率:
单位时间内对模拟信号的采样次数。奈奎斯特采样定理,要从抽样信号中无失真地恢复原信号,抽样频率应大于2倍信号最高频率。 抽样频率小于2倍频谱最高频率时,信号的频谱有混叠。 抽样频率大于2倍频谱最高频率时,信号的频谱无混叠。人耳能够感觉到的最高频率为20kHz,因此要满足人耳的听觉要求,则需要至少每秒进行40k次采样,用40kHz表达,这个40kHz就是采样率。我们常见的CD,采样率为44.1kHz。
采样位数:
每个采样点能够表示的数据范围。采样位数可以理解为采集卡处理声音的解析度。这个数值越大,解析度就越高,录制和回放的声音就越真实。录音的本质就是把模拟声音信号转换成数字信号;反之,在播放时则是把数字信号还原成模拟声音信号输出。采集卡的位是指采集卡在采集和 播放声音文件时所使用数字声音信号的二进制位数。采集卡的位客观地反映了数字声音信号对输入声音信号描述的准确程度。8位代表2的8次方--256,16 位则代表2的16次方--64K。一段相同的音频,16位声卡能把它分为64K个精度单位进行处理,而8位声卡只能处理256个精度单位, 有一定程度的信号损失。
声道:
声道(Sound Channel) 是指声音在录制或播放时在不同空间位置采集或回放的相互独立的音频信号,所以声道数也就是声音录制时的音源数量或回放时相应的扬声器数量。单声道,声音的采集/播放只有一路信号(可以理解为只有一个麦克风/扬声器)。双声道(立体声),声音在录制过程中被分配到两个独立的声道,从而达到了很好的声音定位效果。单声道缺乏对声音的位置定位,而立体声技术则彻底改变了这一状况。四声道环绕,有前左、前右,后左、后右,听众则被包围在这中间,同时还建议增加一个低音音箱,以加强对低频信号的回放处理,四声道系统可以带来来自多个不同方向的声音环绕。5.1声道,5.1声音系统来源于4.1环绕,不同之处在于它增加了一个中置单元,这个中置单元是一个专门设计的超低音声道,这一声道可以产生频响范围20~120Hz的超低音,把对话集中在整个声场的中部。7.1声道,7.1系统在5.1的基础上又增加了中左和中右两个发音点,建立起一套前后声场相对平衡的声场。
编码:
采样和量化后的信号还不是数字信号,需要将它转化为数字编码脉冲,这一过程称为编码。模拟音频进采样、量化和编码后形成的二进制序列就是数字音频信号。
音频帧:
音频数据是流式的,本身没有明确的一帧帧的概念,在实际的应用中为了处理方便,一般约定俗成取2.5ms~60ms为单位的数据量为一帧音频,长度没有特别的标准,它是根据编解码器和具体应用的需求决定。
音频码率:
一个音频流中每秒钟能通过的数据量。如128kbps,其中ps(per second)为每秒,kb为千位,那么128kbps表示一秒钟能传输的数据量是128千位。对于格式相同的文件来说,码率越大的话,音质越好。但是对于不同格式的音频文件来说,相同码率并不代表其音质一样。音频的码率=采样率*位深度*通道数。
2.2、音频SDK架构
主流的音频SDK通常包括音频采集、音频处理(AGC、AEC、VAD、ANS)、编解码、缓存、网络传输、音频播放等部分,其中音频处理部分涉及到矩阵运算,某些厂商还会用到openMP做算法加速。
3、音频采集
音频采集以及麦克占用检测方案参见:Android麦克风探测器_喜六六的博客-CSDN博客
4、音频处理
音频处理链路包括AEC回声消除、AGC音量的自动增益控制、VAD音频的活性检测、编码/解码(speex、opus)、ANS降噪,具体处理流程如下所示:
4.1、自动增益(AGC)
作用:
在音视频通话的现实场景中,不同的参会人说话音量各有不同,参会用户需要频繁的调整播放音量来满足听感的需要,戴耳机的用户随时承受着大音量对耳朵的 “暴击”。自动增益控制算法能够统一音频音量大小,极大地缓解了由设备采集差异、说话人音量大小、距离远近等因素导致的音量的差异。
因此,自动增益控制的主要作用是,当功放的输入信号幅度变化很大的情况下,使输出信号幅度保持恒定。当输入信号达到一定强度时,启动压缩功能,减小放大增益,使得输出幅度降低;当输入信号降低到一定程度时,再逐渐恢复默认的放大增益。AGC能够保证输入信号的幅度在不断变化,但是输出信号的幅度是固定的,也就是说输出功率是固定的。