前言
上一篇的时候,已经简单介绍过一些音频的基础知识。我们说到,通常采用脉冲代码调制编码,即PCM(Pulse Code Modulation)编码,通过抽样、量化、编码三个步骤将连续变化的模拟信号转换为数字编码。但是这和市场上常见的编解码有什么区别呢?
市场上存在多种类型的编码,我们该如何选择呢?
编码分类
根据编码方式的不同,音频编码技术分为三种:波形编码、参数编码和混合编码。一般来说,波形编码的话音质量高,但编码速率也很高;参数编码的编码速率很低,产生的合成语音的音质不高;混合编码使用参数编码技术和波形编码技术,编码速率和音质介于它们之间。
波形编码
波形编码是指不利用生成音频信号的任何参数,直接将时间域信号变换为数字代码,使重构的语音波形尽可能地与原始语音信号的波形形状保持一致。波形编码的基本原理是在时间轴上对模拟语音信号按一定的速率抽样,然后将幅度样本分层量化,并用代码表示。
波形编码方法简单、易于实现、适应能力强并且语音质量好。不过因为压缩方法简单也带来了一些问题:压缩比相对较低,需要较高的编码速率。一般来说,波形编码的复杂程度比较低,编码速率较高、通常在16 kbit/s以上,质量相当高。但编码速率低于16 kbit/s时,音质会急剧下降。
最简单的波形编码方法是PCM(Pulse Code Modulation,脉冲编码调制),它只对语音信号进行采样和量化处理。优点是编码方法简单,延迟时间短,音质高,重构的语音信号与原始语音信号几乎没有差别。不足之处是编码速率比较高(64 kbit/s),对传输通道的错误比较敏感。
参数编码
参数编码是从语音波形信号中提取生成语音的参数,使用这些参数通过语音生成模型重构出语音,使重构的语音信号尽可能地保持原始语音信号的语意。也就是说,参数编码是把语音信号产生的数字模型作为基础,然后求出数字模型的模型参数,再按照这些参数还原数字模型,进而合成语音。
参数编码的编码速率较低,可以达到2.4 kbit/s,产生的语音信号是通过建立的数字模型还原出来的,因此重构的语音信号波形与原始语音信号的波形可能会存在较大的区别、失真会比较大。而且因为受到语音生成模型的限制,增加数据速率也无法提高合成语音的质量。不过,虽然参数编码的音质比较低,但是保密性很好,一直被应用在军事上。典型的参数编码方法为LPC(Linear Predictive Coding,线性预测编码)。
混合编码
混合编码是指同时使用两种或两种以上的编码方法进行编码。这种编码方法克服了波形编码和参数编码的弱点,并结合了波形编码高质量和参数编码的低编码速率,能够取得比较好的效果。
编码格式
PCM编码
PCM是Pulse Code Modulation的缩写。上一篇我们提到了PCM大致的工作流程,我们现在不需要关心PCM最终编码采用的是什么计算方式,我们只需要知道PCM编码的音频流的优点和缺点就可以了。PCM编码的最大的优点就是音质好,最大的缺点就是体积大。
PCM被约定俗成为无损编码,是相对于mp3,aac编码的。相对自然界的信号,音频编码最多只能做到无限接近(至少目前的技术只能这样),任何数字音频编码方案都是有损的,因为无法完全还原。在计算机应用中,能够达到最高保真水平的就是PCM编码,被广泛用于素材保存及音乐欣赏,CD、DVD以及我们常见的WAV文件中均有应用。PCM代表了数字音频中最佳的保真水准,但是并不意味着PCM就能够确保信号绝对保真,PCM也只能做到最大程度的无限接近。
Opus编码
Opus是一个有损声音编码的格式,Opus的前身是celt编码器。是由IETF开发,适用于网络上的实时声音传输,标准格式为RFC6716。使用上没有任何专利或限制。
在当今的有损音频格式争夺上,拥有众多不同编码器的AAC格式打败了同样颇有潜力的Musepack、Vorbis等格式,而在Opus格式诞生后,情况似乎不同了。通过诸多的对比测试,低码率下Opus完胜曾经优势明显的HE AAC,中码率就已经可以媲敌码率高出30%左右的AAC格式,而高码率下更接近原始音频。
简单来说,opus是一个高保真的适合在网络中传输的开源的语音编码格式,相对于其他编码格式来讲,保真性更好,但体积会稍微大一些。
Opus官网地址:http://www.opus-codec.org/
OGG编码
OGG全称是OGG Vorbis,是一种新的音频压缩格式。OGG是一个庞大的多媒体开发计划的项目名称,将涉及视频音频等方面的编码开发。整个OGG项目计划的目的就是向任何人提供完全免费多媒体编码方案!OGG的信念就是:OPEN!FREE!Vorbis这个词汇是特里·普拉特柴特的幻想小说《Small Gods》中的一个"花花公子"人物名。这个词汇成为了OGG项目中音频编码的正式命名。目前Vorbis已经开发成功,并且开发出了编码器。
和MP3一样,Ogg Vorbis是一种灵活开放的音频编码,能够在编码方案已经固定下来后还能对音质进行明显的调节和新算法的改良。因此,它的声音质量将会越来越好,和MP3相似,Ogg Vorbis更像一个音频编码框架,可以不断导入新技术逐步完善。和MP3一样,OGG也支持VBR。
AAC编码
AAC,全称Advanced Audio Coding,是一种专为声音数据设计的文件压缩格式。与MP3不同,它采用了全新的算法进行编码,更加高效,具有更高的“性价比”。利用AAC格式,可使人感觉声音质量没有明显降低的前提下,更加小巧。
AAC本身编解码器质量非常高。作为一种高压缩比的音频压缩算法,AAC通常压缩比为18:1 (也有资料说为20:1),但是还能保存较好的音质。在后面的文章《Android 音视频之音频录制》中,我用demo验证过,1分钟录制的音频文件只有101KB的大小,想比较pcm数据,的确被压缩很多。
编码比较
之前文章中介绍过。目前市场编解码器性能比较Opus > Vorbis > AAC 。我们先来看一张音频编码器的性能对比图:
注意,图中绿色线条是免费的,开源的;蓝色线条是免费的,但是不开源的;红色线条是收费的,不开源的
图中我们可以很直观的看到,Opus编码从低码率到高码率上都是支持的,并且在高码率上也是略强于AAC和Vorbis编码的。而且相比较在64kb/s上的G.711编码,Opus的质量是远远高于他的。
AAC编码在2000年之后也新添加了一些技术算法,使他在低码率上也能较好的支持。之后我会在《Android 音视频之AAC编码》中着重介绍AAC,有兴趣的伙伴可以关注一下。
有问题的地方请大家帮忙指出,谢谢。
持续更新中...