一、音频编码调制技术
根据编码方式的不同,音频编码技术分为三种:波形编码、参数编码和混合编码。一般来说,波形编码的话音质量高,但编码速率也很高;参数编码的编码速率很低,产生的合成语音的音质不高;混合编码使用参数编码技术和波形编码技术,编码速率和音质介于它们之间。
实际应用中,我们通常采用的是脉冲编码调制(即PCM编码)。PCM通过抽样、量化、编码三个步骤将连续变化的模拟信号转换为数字编码。
脉冲编码调制(Pulse Code Modulation)的处理过程如下:
模拟信号 >> [ 抽样 -> 量化 -> 编码 ] >> 数字信号
二、脉冲编码调制相关术语
上述PCM过程,会用到如下相关技术和术语。
2.1 采样和采样频率
在音频处理时要先把音频的模拟信号变成数字信号,这叫A/D转换。要把音频的模拟信号变成数字信号,就需要采样,或者叫抽样。当要把音频播放出来时则需要把数字信号转换成模拟信号,这叫D/A转换。一秒钟内采样的次数称为采样频率。
根据Nyquist采样定理,要想重建原始信号,采样频率必须大于信号中最高频率的两倍。采样频率越高,越接近原始信号,但是也加大了运算处理的复杂度。
人能感受到的频率范围为20HZ--20kHZ,一般音乐的采样频率为44.1kHZ(根据Nyquist采样定理,采样频率大于信号中最高频率的两倍得出)。更高音乐的采样率可以是48kHZ和96kHZ,不过一般人用耳听感觉不出差别了。
语音主要是以沟通为主,不需要像音乐那样清晰。语音分窄带和宽带:窄带频率范围为300Hz--3400Hz,对应的采样频率为8000Hz;宽带频率范围为50Hz--7000Hz,相应的采样频率为16000Hz,用16k采样的语音就称为高清语音了。现在主流的语音采样频率为16kHz。其中语音识别技术所使用的采样率基本都是16KHz。
2.2 采样位数
数字信号是用0和1来表示的,采样位数就是采样值用多少位0和1来表示,也叫采样精度。用的位数越多就越接近真实声音。如用8位表示,采样值取值范围就是-128--127,如用16位表示,采样值取值范围就是-32768--32767。
2.3 通道数
通常语音只用一个声道。而对于音乐来说,既可以是单声道(mono),也可以是双声道(即左声道右声道,叫立体声stereo),还可以是多声道,叫环绕立体声,多用于影院中。
2.4 比特率
也叫码率,表示每秒音频数据量的大小。计算公司:比特率=采样率采样精度声道数**,单位是kbps。
2.5 编解码
如果把采样值直接保存或者发送,会占用很大的存储空间或者很大的流量。以16kHz采样率16位采样位数单声道为例,一秒钟就有1600016bit1/8bit=32000bytes字节。通常需要把采样后的数字信号压缩后才保存或者发送。把采样值压缩叫编码(encode),形成比特流(bitstream). 把比特流还原出采样值叫解码(decode),统称编解码(codec)。
通常我们把音频采样过程叫脉冲编码调制编码,即PCM(Pulse Code Modulation)编码,采样值也叫PCM值,为了节省保存空间或者发送流量,会对PCM值压缩。
2.6 有损和无损
根据采样和量化的过程可知,音频编码最多只能做到无限接近自然界的信号,至少目前的技术还不可能将其完全一样。这是因为自然界的信号是连续的,而音频编码后的值是离散的。因此,任何数字音频编码方案都是有损的,这也就意味着任何的音频都不可能完全还原出自然界的声音。
不过我们常说的有损和无损是指PCM数据压缩(编码)的过程:把PCM数据压缩后无任何损伤叫无损压缩,不过压缩程度不高;把PCM数据压缩后有损伤叫有损压缩,最多可以压到几十分之一,不过音频质量差些。
三、常见音频压缩标准
目前主要有三大技术标准组织制定压缩标准:
- ITU,主要制定有线语音的压缩标准(g系列),有711/g722/g726/g729等。
- 3GPP,主要制定无线语音的压缩标准(amr系列等),有amr-nb/amr-wb。后来ITU吸纳了amr-wb,形成了g722.2。
- MPEG,主要制定音乐的压缩标准,有11172-3,13818-3/7,14496-3等。
一些大公司或者组织也制定压缩标准,比如iLBC,OPUS。
四、PCM音频前后处理
音频处理是指对PCM数据(也叫线性数据)进行处理,从而达到想要的效果,如回声消除。
对音频编码前的PCM数据进行处理叫音频前处理,主要用于语音中,来去除各种干扰,使声音更清晰,主要有回声消除、噪声抑制、增益控制等。
对音频解码后的PCM数据进行处理叫音频后处理,主要用于音乐中,来产生各种音效,使音乐更动听,主要有均衡器、混响等。
五、PCM音频传输
这里主要是指网络传输,通过网络把音频数据传给对方。语音和音乐两种场景下有明显的区别:
- 对于语音来说,实时性要求很高,主要用RTP/UDP做承载,由于UDP是不可靠传输,会丢包乱序等,影响语音质量,所以要采取相应的措施,主要有PLC(丢包补偿)、FEC(前向纠错)、重传、jitter buffer等。
- 对于音乐来说,以前是播放本地音乐文件,近些年随着网络带宽的加大,可以播放云端的音乐文件了。播放时要把音乐文件传给播放器,一般是边播放边下载,播放音乐对实时性要求不高,一般用HTTP/TCP做承载,也就不存在丢包乱序等问题了。
六、常见音频格式
6.1 WAV格式
WAV格式,是微软公司开发的一种声音文件格式,也叫波形声音文件,是最早的数字音频格式。
特点:音质非常好,被大量软件所支持。
适用于:多媒体开发、保存音乐和音效素材。
6.2 MP3格式
MP3具有不错的压缩比,使用LAME编码的中高码率的mp3,听感上已经非常接近源WAV文件。使用合适的参数,LAME编码的MP3很适合于音乐欣赏。由于mp3编码是有损的,因此多次编辑后,音质会急剧下降,mp3并不适合保存素材,但作为作品的demo确实相当优秀的。MP3也具有流媒体的基本特征,可以做到在线播放。
特点:音质好,压缩比比较高,被大量软件和硬件支持,应用广泛。
适用于:适合用于比较高要求的音乐欣赏。
6.3 OGG格式
Ogg是一种非常有潜力的编码,在各种码率下都有比较惊人的表现,尤其中低码率下。Ogg除了音质好之外,她还是一个完全免费的编码,这对ogg被更多支持打好了基础。Ogg有着非常出色的算法,可以用更小的码率达到更好的音质,128kbps的Ogg比192kbps甚至更高码率的mp3还要出色。Ogg的高音具有一定的金属味道,因此在编码一些高频要求很高的乐器独奏时,Ogg的这个缺陷会暴露出来。OGG具有流媒体的基本特征,但现在还没有媒体服务软件支持,因此基于ogg的数字广播还无法实现。
特点:可以用比mp3更小的码率实现比mp3更好的音质,高中低码率下均具有良好的表现。
适用于:用更小的存储空间获得更好的音质(相对MP3)。
6.4 MPC格式
和OGG一样,MPC的竞争对手也是mp3,在中高码率下,MPC可以做到比竞争对手更好音质,在中等码率下,MPC的表现不逊色于Ogg,在高码率下,MPC的表现更是独孤求败,MPC的音质优势主要表现在高频部分,MPC的高频要比MP3细腻不少,也没有Ogg那种金属味道,是目前最适合用于音乐欣赏的有损编码。MPC有不错的编码效率,编码时间要比OGG和LAME短不少。
特点:中高码率下,具有有损编码中最佳的音质表现,高码率下,高频表现极佳
适用于:在节省大量空间的前提下获得最佳音质的音乐欣赏。
6.5 WMA格式
微软开发的WMA同样也是不少朋友所喜爱的,在低码率下,有着好过mp3很多的音质表现,WMA的出现,立刻淘汰了曾经风靡一时的VQF编码。
特点:低码率下的音质表现难有对手
适用于:数字电台架设、在线试听、低要求下的音乐欣赏
6.6 MP3PRO格式
作为mp3的改良版本的mp3PRO表现出了相当不错的素质,高音丰满,虽然mp3PRO是通过SBR技术在播放过程中插入的,但实际听感相当不错,虽然显得有点单薄,但在64kbps的世界里已经没有对手了,甚至超过了128kbps的mp3,但很遗憾的是,mp3PRO的低频表现也象mp3一样的破,所幸的是,SBR的高频插值可以或多或少的掩盖掉这个缺陷,因此mp3PRO的低频弱势反而不如WMA那么明显。整体而言,64kbps的mp3PRO达到了128kbps的mp3的音质水平,在高频部分还略有胜出。
特点:低码率下的音质之王。
适用于:低要求下的音乐欣赏。
6.7 APE格式
一种新兴的无损音频编码,可以提供50-70%的压缩比,虽然比起有损编码来太不值得一提了,但对于追求完美注意的朋友简直是天大的福音。APE可以做到真正的无损,而不是听起来无损,压缩比也要比类似的无损格式要好。
特点:音质非常好。
适用于:最高品质的音乐欣赏及收藏。
6.8 MIDI格式
MIDI是Musical InstrumentDigital Interface的缩写,又称作乐器数字接口,是数字音乐/电子合成乐器的统一国际标准。它定义了计算机音乐程序、数字合成器及其它电子设备交换音乐信号的方式,规定了不同厂家的电子乐器与计算机连接的电缆和硬件及设备间数据传输的协议,可以模拟多种乐器的声音。MIDI文件就是MIDI格式的文件,在MIDI文件中存储的是一些指令。把这些指令发送给声卡,由声卡按照指令将声音合成出来。
七、常用音频处理开源库
7.1 OpenAL
OpenAL是自由软件界的跨平台音效API。OpenAL最初是由LokiSoftware所开发,是为了将Windows商业游戏移植到Linux上。Loki倒闭以后,这个项目由自由软件/开放源始码社群继续维护。
http://www.openal.org/
7.2 speex
Speex提供一个可以替代高性能语音编解码来降低语音应用输入门槛。另外,相对于其它编解码器,Speex也很适合网络应用,在网络应用上有着自己独特的优势。
https://www.speex.org/
最后,推荐一个免费的音频处理软件Audacity,在Windows和Linux都有对应的软件,非常好用。
https://www.audacityteam.org/