众所周知,我们在互联网上听到的声音,都是先经过录制,然后再传输到互联网上。比如歌曲、电影、主播等的声音。
1 PCM
录音的原理可以简单理解为:把声源的振动记录下来,需要时再让某个物体按照记录下来的振动规律去振动,就会产生与原来一样的声音。
- 记录
- 重放
那么如何把声音(声源的振动)记录下来呢?声音属于模拟信号,但计算机更便于处理和存储的是数字信号(二进制编码),所以需要将模拟信号(Analog Signal)转换成数字信号(Digital Signal)后进行存储。这一过程,我们可以称之为音频数字化。
音频数字化的常见技术方案是脉冲编码调制(PCM,Pulse Code Modulation
),主要过程是:采样 → 量化 → 编码。
1.1 采样
模拟信号的波形是无限光滑的,可以看成由无数个点组成,由于存储空间是相对有限的,所以数字编码过程中,必须要对波形的点进行采样。采样(Sampling
):每隔一段时间采集一次模拟信号的样本,是一个在时间上将模拟信号离散化(把连续信号转换成离散信号)的过程。
1.1.1 采样率
每秒采集的样本数量,称为采样率(采样频率、采样速率,Sampling Rate
)。比如,44.1kHz
采样率表示1
秒钟采集44100
个样本。
1.1.2 采样定理
根据采样定理(奈奎斯特–香农采样定理,Nyquist-Shannon sampling theorem
)得知:只有当采样率高于声音信号最高频率的2倍时,才能把采集的声音信号唯一地还原成原来的声音。人耳能够感觉到的最高声音频率为20000Hz
,因此为了满足人耳的听觉要求,需要至少每秒进行40000
次采样(40kHz
采样率)。这就是为什么常见的CD
的采样率为44.1kHz
。电话、无线对讲机、无线麦克风等的采样率是8kHZ
。
1.2 量化
量化(Quantization
):将每一个采样点的样本值数字化。
1.2.1 位深度
位深度(采样精度,采样大小,Bit Depth
):使用多少个二进制位来存储一个采样点的样本值。位深度越高,表示的振幅越精确。我们常见的CD
采用的是16bit
的位深度,能表示65536(2^16)
个不同的值,DVD
采用的是24bit
的位深度,大多数电话设备使用的是8bit
的位深度。
- 不同采样率、位深度对比
1.3 编码
编码:将采样和量化后的数字数据转换成二进制码流。
1.4 其他概念
1.4.1 声道(Channel
)
单声道产生一组声波数据,双声道(立体声)产生两组声波数据。
PCM
大小计算方法:
- 采样率 * 位深度 * 声道数 * 时间
那么采样率44.1kHz
,位深度16bit
的1
分钟立体声的PCM
数据有多大?
44100 * 16 * 2 * 60 / 8 ≈ 10.09MB
1
分钟10.09MB
,很显然,这对大部分用户来说是不可接受。如果想在不改变音频时长的前提下,降低音频数据的大小,有两种方案:降低采样指标(即降低采样率和位深度);压缩。降低采样指标是不可取的,会导致音频质量下降,用户体验变差,因此专家们研发了各种压缩方案。
1.4.2 比特率
比特率(Bit Rate):指单位时间内传输或处理的比特数量,单位是:比特每秒(bit/s或bps)、千比特每秒(Kbit/s或Kbps)、兆比特每秒(Mbit/s或Mbps)、吉比特每秒(Gbit/s或Gbps)、太比特每秒(Tbit/s或Tbps)。
PCM
比特率计算方法:
- 采样率 * 位深度 * 声道数
那么采样率44.1kHz
、位深度16bit
的立体声PCM
数据的比特率是多少呢?
44100 * 16 * 2 = 1411.2Kbps
通常情况下,采样率、位深度越高,数字化音频的质量就越好。从比特率的计算公式可以得出:比特率越高,数字化音频的质量就越好。
1.4.3 信噪比
信噪比(Signal-to-noise ratio, SNR, S/N
, 讯噪比):指信号与噪声的比例,用于比较所需信号的强度与背景噪声的强度,以分贝(dB
)为单位。
位深度限制了信噪比的最大值,它们的关系如下表所示:
位深度 | 信噪比 |
---|---|
4 | 24.08 |
8 | 48.16 |
11 | 66.22 |
12 | 72.24 |
16 | 96.33 |
18 | 108.37 |
20 | 120.41 |
24 | 144.49 |
32 | 192.66 |
48 | 288.99 |
64 | 385.32 |
2 音频的编码与解码
2.1 编码(Encode
)
PCM
数据可以理解为:未经压缩的原始音频数据,体积比较大,为了更便于存储和传输,一般会使用某种音频编码对其进行编码压缩,再存储成某种音频文件格式。
压缩分为无损压缩与有损压缩:
- 无损压缩
- 解压后可以完全还原出原始数据
- 压缩比小,体积大
- 有损压缩
- 解压后不能完全还原出原始数据,会丢失一部分信息
- 压缩比大,体积小
- 压缩比越大,丢失的信息就越多,还原后的信号失真就会越大
- 一般是通过舍弃原始数据中对人类听觉不重要的部分,达到压缩成较小文件的目的
- 压缩比 = 未压缩大小 / 压缩后大小
2.2 解码(Decode
)
当需要播放音频时,得先解码(解压缩)出PCM
数据,再进行播放。
3 常见的音频编码与文件格式
首先,需要注意的是:音频文件格式并不等于音频编码。比如:
- WAV只是一种文件格式,并不是一种编码
- FLAC既是一种文件格式,也是一种编码
下面将常见的音频编码和文件格式做一个简介,以后有需要时再进行详细介绍。
名称 | 无损压缩 | 文件扩展名 |
---|---|---|
Monkey's Audio | ✔️ | .ape |
FLAC(Free Lossless Audio Codec) | ✔️ | .flac |
ALAC(Apple Lossless Audio Codec) | ✔️ | .m4a/.caf |
MP3(MPEG Audio Layer III) | ❌ | .mp3 |
WMA(Windows Media Audio) | ❌ | .wma |
AAC(Advanced Audio Coding) | ❌ | .acc/.mp4/.m4a |
Vorbis | ❌ | .ogg |
Speex | ❌ | .spx |
Opus | ❌ | .opus |
Ogg | .ogg | |
WAV(Waveform Audio File Format) | .wav | |
AIFF(Audio Interchange File Format) | .aiff、.aif |
3.1 无损
3.1.1 Monkey's Audio
Monkey's Audio
是一种无损的音频编码和文件格式,文件扩展名为.ape
,压缩率一般为55%
左右。
3.1.2 FLAC
FLAC(Free Lossless Audio Codec)
是一种无损的音频编码和文件格式,文件扩展名为.flac
。虽然压缩率稍有不及Monkey's Audio
,但FLAC
技术更先进,占用资源更低,有更多的平台和硬件产品支持FLAC
。
3.1.3 ALAC
ALAC(Apple Lossless Audio Codec)
是由Apple
开发的一种无损的音频编码,文件扩展名为.m4a、.caf
。
3.2 有损
3.2.1 MP3
MP3(MPEG Audio Layer III)
是非常流行的一种有损音频编码和文件格式,文件扩展名.mp3
。
- 第1版是:MPEG-1 Audio Layer III,属于国际标准ISO/IEC 11172-3
- 第2版是:MPEG-2 Audio Layer III,属于国际标准ISO/IEC 13818-3
- 第3版是:MPEG-2.5 Audio Layer III,并不是由MPEG官方开发的,不是公认的标准
3.2.2 WMA
WMA(Windows Media Audio)
是由Microsoft
开发的音频编码和文件格式,文件扩展名为.wma
。包括4种类型:
WMA
:原始的WMA
编解码器,作为MP3
的竞争者,属于有损音频编码WMA Pro
:支持更多声道和更高质量的音频,属于有损音频编码WMA Lossless
:属于无损音频编码WMA Voice
:属于有损音频编码
3.2.3 AAC
AAC(Advanced Audio Coding)
是由Fraunhofer IIS
、杜比实验室、AT&T
、Sony
、Nokia
等公司共同开发的有损音频编码和文件格式,压缩比通常为18:1
。
AAC
被设计为MP3
格式的后继产品,通常在相同的比特率下可以获得比MP3
更高的声音质量,是iPhone、iPod、iPad、iTunes
的标准音频格式。
AAC
编码的文件扩展名主要有3
种:
.acc
:传统的ACC
编码,使用MPEG-2 Audio Transport Stream (ADTS)
容器.mp4
:使用了MPEG-4 Part 14
的简化版即3GPP Media Release 6 Basic (3gp6)
进行封装的AAC
编码.m4a
:为了区别纯音频MP4
文件和包含视频的MP4
文件而由Apple
公司使用的扩展名Apple iTunes
对纯音频MP4
文件采用了.m4a
文件扩展名M4A
的本质和音频MP4
相同,故音频MP4
文件可以直接更改文件扩展名为.m4a
3.2.4 Vorbis
Vorbis
是由Xiph.Org
基金会开发的一种有损音频编码。通常以Ogg
作为容器格式,所以常合称为Ogg Vorbis
,文件扩展名.ogg
。
3.2.5 Speex
Speex
是由Xiph.Org
基金会开发的一种有损音频编码和文件格式,文件扩展名为.spx
。
3.2.6 Opus
Opus
是由Xiph.Org
基金会开发的一种有损音频编码和文件格式,文件扩展名为.opus
。用以取代Vorbis
与Speex
。经过多次盲听测试,在任何给定的比特率下都比其他标准音频格式具有更高的质量,包括MP3、AAC
。
3.3 文件格式
3.3.1 Ogg
Ogg
是一种多媒体文件格式,由Xiph.Org
基金会所维护,可以纳入各式各样的音视频编码(音频、视频均可),文件扩展名常为.ogg
。
Ogg
常用的音频编码有:
- 有损压缩:
Speex、Vorbis、Opus
- 无损压缩:
FLAC
- 未压缩:
PCM
3.3.2 WAV
WAV (Waveform Audio File Format)
是由IBM
和Microsoft
开发的音频文件格式,扩展名为.wav
,通常采用PCM
编码,常用于Windows
系统中。
WAV的文件格式如下图所示,前面有44个字节的文件头,紧跟在后面的就是音频数据(比如PCM数据)。
- NumChannels:声道数
- SampleRate:采样率(Hz)
- ByteRate:每秒多少个字节(Byte/s)
- BitsPerSample:位深度
3.3.3 AIFF
AIFF (Audio Interchange File Format)
是由Apple
开发的音频文件格式,扩展名为.aiff、.aif
。跟WAV
一样,通常采用PCM
编码,常用于Mac
系统中。
3.4 有损和无损
根据采样率和位深度可以得知:相对于自然界的信号,音频编码最多只能做到无限接近,任何数字音频编码方案都是有损的,因为无法完全还原。目前能够达到最高保真水平的就是PCM
编码,因此,PCM
约定俗成叫做无损音频编码,被广泛用于素材保存及音乐欣赏,CD、DVD
以及常见的WAV文件中均有应用。
但并不意味着PCM
就能够确保信号绝对保真,PCM
也只能做到最大程度的无限接近。我们习惯性的把MP3
列入有损音频编码范畴,是相对于PCM
编码的。要做到真正的无损是困难的,就像用数字去表达圆周率,不管精度多高,也只是无限接近,而不是真正等于圆周率的值。