小码哥-音视频学习笔记(第五天): 重识音频

1,001 阅读11分钟

转载于 【秒懂音视频开发】07_重识音频

我们平时在互联网上听到的声音,都是先经过录制后,再传输到互联网上的。比如歌曲、电影、主播等的声音。

PCM

  • 录音的原理可以简单理解为:把声源的振动记录下来,需要时再让某个物体按照记录下来的振动规律去振动,就会产生与原来一样的声音。

image.png

1.png

  • 如何把声音(声源的振动)记录下来呢?声音属于模拟信号,但更便于计算机处理和存储的是数字信号(二进制编码),所以需要将模拟信号(Analog Signal)转成数字信号(Digital Signal)后进行存储。这一过程,我们可以称之为:音频数字化。

2.png

3.jpg

  • 将音频数字化的常见技术方案是脉冲编码调制(PCM,Pulse Code Modulation),主要过程是:采样 → 量化 → 编码。

4.webp

5.png

一、采样

  • 模拟信号的波形是无限光滑的,可以看成由无数个点组成,由于存储空间是相对有限的,数字编码过程中,必须要对波形的点进行采样。采样(Sampling):每隔一段时间采集一次模拟信号的样本,是一个在时间上将模拟信号离散化(把连续信号转换成离散信号)的过程。

1、采样率

  • 每秒采集的样本数量,称为采样率(采样频率,采样速率,Sampling Rate)。比如,采样率44.1kHz表示1秒钟采集44100个样本。

2、采样定理

  • 根据采样定理(奈奎斯特–香农采样定理,Nyquist-Shannon sampling theorem)得知:只有当采样率高于声音信号最高频率的2倍时,才能把采集的声音信号唯一地还原成原来的声音。人耳能够感觉到的最高声音频率为20000Hz,因此为了满足人耳的听觉要求,需要至少每秒进行40000次采样(40kHz采样率)。这就是为什么常见的CD的采样率为44.1kHz。电话、无线对讲机、无线麦克风等的采样率是8kHZ。

二、量化

  • 量化(Quantization):将每一个采样点的样本值数字化。

1、位深度

  • 位深度(采样精度,采样大小,Bit Depth):使用多少个二进制位来存储一个采样点的样本值。位深度越高,表示的振幅越精确。常见的CD采用16bit的位深度,能表示65536(2^16)个不同的值。DVD使用24bit的位深度,大多数电话设备使用8bit的位深度。

6.png

位深度越大, 记录的振幅数据越精细

2、编码

  • 编码:将采样和量化后的数字数据转成二进制码流。

三、其他概念

1、声道(Channel)

  • 单声道产生一组声波数据,双声道(立体声)产生两组声波数据。

采样率44.1kHZ、位深度16bit的1分钟立体声PCM数据有多大?

  • 采样率 * 位深度 * 声道数 * 时间
  • 44100 * 16 * 2 * 60 / 8 ≈ 10.34MB
  • 1分钟10.34MB,这对于大部分用户来说是不能接受的。要想在不改变音频时长的前提下,降低音频数据的大小,只有2种方法:降低采样指标、压缩。降低采样指标是不可取的,会导致音频质量下降,用户体验变差,因此专家们研发了各种压缩方案。

2、比特率

  • 比特率(Bit Rate),指单位时间内传输或处理的比特数量,单位是:比特每秒(bit/s或bps),还有:千比特每秒(Kbit/s或Kbps)、兆比特每秒(Mbit/s或Mbps)、吉比特每秒(Gbit/s或Gbps)、太比特每秒(Tbit/s或Tbps)。

采样率44.1kHZ、位深度16bit的立体声PCM数据的比特率是多少?

  • 采样率 * 位深度 * 声道数
  • 44100 * 16 * 2 = 1411.2Kbps
  • 通常,采样率、位深度越高,数字化音频的质量就越好。从比特率的计算公式可以看得出来:比特率越高,数字化音频的质量就越好。

3、信噪比

  • 信噪比(Signal-to-noise ratio,SNR,S/N,讯噪比),指信号与噪声的比例,用于比较所需信号的强度与背景噪声的强度,以分贝(dB)为单位。

  • 位深度限制了信噪比的最大值,它们的关系如下表所示。

位深度信噪比
424.08
848.16
1166.22
1272.24
1696.33
18108.37
20120.41
24144.49
32192.66
48288.99
64385.32

音频的编码与解码

一、编码(Encode)

  • PCM数据可以理解为是:未经压缩的原始音频数据,体积比较大,为了更便于存储和传输,一般都会使用某种音频编码对它进行编码压缩,然后再存成某种音频文件格式

7.png

  • 压缩分为无损压缩和有损压缩。

  • 无损压缩

    • 解压后可以完全还原出原始数据
    • 压缩比小,体积大
  • 有损压缩

    • 解压后不能完全还原出原始数据,会丢失一部分信息
    • 压缩比大,体积小
    • 压缩比越大,丢失的信息就越多,还原后的信号失真就会越大
    • 一般是通过舍弃原始数据中对人类听觉不重要的部分,达成压缩成较小文件的目的
  • 压缩比 = 未压缩大小 / 压缩后大小

二、解码(Decode)

  • 当需要播放音频时,得先解码(解压缩)出PCM数据,然后再进行播放。

8.png

所以, 一个音频数据, 在经过多次 PCM -> 有损压缩 -> PCM - 有损压缩 -> PCM ... 之后, 质量会越来越差

常见的音频编码和文件格式

  • 需要注意的是:音频文件格式并不等于音频编码。比如:

    • 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

注意: 音频编码文件格式是不同的

  1. 存储音频时: PCM数据通过音频编码压缩数据, 然后存放到不同文件格式的文件中(mp3, aac等)
  2. 播放音频时: 从不同文件格式的文件中(mp3, aac等)取出数据, 通过音频编码解压成PCM数据, 然后进行播放

一、无损

1、Monkey's Audio

  • Monkey's Audio,是一种无损音频编码文件格式,文件扩展名为.ape,压缩率一般在55%左右。

2、FLAC

  • FLAC(Free Lossless Audio Codec),是一种无损音频编码文件格式,文件扩展名为.flac。虽然压缩率稍有不及Monkey's Audio,但FLAC技术更先进,占用资源更低,有更多的平台及硬件产品支持FLAC。

3、ALAC

  • ALAC(Apple Lossless Audio Codec),是由Apple开发的一种无损音频编码,文件扩展名为.m4a.caf

二、有损

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官方开发的,不是公认的标准

2、WMA

  • WMA(Windows Media Audio),是由Microsoft开发的音频编码和文件格式,文件扩展名为.wma。包括4种类型:
    • WMA:原始的WMA编解码器,作为MP3的竞争者,属于有损音频编码
    • WMA Pro:支持更多声道和更高质量的音频,属于有损音频编码
    • WMA Lossless:属于无损音频编码
    • WMA Voice:属于有损音频编码

WMA已经被淘汰, 了解一下即可

3、AAC

  • AAC(Advanced Audio Coding),是由Fraunhofer IIS、杜比实验室、AT&T、Sony、Nokia等公司共同开发的有损音频编码和文件格式,压缩比通常为18:1。
  • AAC被设计为MP3格式的后继产品,通常在相同的比特率下可以获得比MP3更高的声音质量,是iPhone、iPod、iPad、iTunes的标准音频格式。
  • AAC编码的文件扩展名主要有3种:
    • .acc: 传统的AAC编码,使用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

AAC作为MP3的后继者, 拥有比MP3更优秀的压缩算法

4、Vorbis

  • Vorbis,是由Xiph.Org基金会开发的一种有损音频编码。通常以Ogg作为容器格式,所以常合称为Ogg Vorbis,文件扩展名为.ogg

5、Speex

  • Speex,是由Xiph.Org基金会开发的一种有音频编码和文件格式,文件扩展名为.spx

6、Opus

  • Opus,是由Xiph.Org基金会开发的一种有损音频编码和文件格式,文件扩展名为.opus。用以取代Vorbis和Speedx。经过多次盲听测试,在任何给定的比特率下都比其他标准音频格式具有更高的质量,包括MP3、AAC。

三、文件格式

1、Ogg

  • Ogg是一种多媒体文件格式,由Xiph.Org基金会所维护,可以纳入各式各样的音视频编码(音频、视频都可以),文件扩展名常为.ogg。
  • Ogg常用的音频编码有:
    • 有损压缩:Speex、Vorbis、Opus
    • 无损压缩:FLAC
    • 未压缩:PCM

2、WAV

  • WAV(Waveform Audio File Format),是由IBM和Microsoft开发的音频文件格式,扩展名是.wav,通常采用PCM编码,常用于Windows系统中。
  • WAV的文件头如下图所示。

image.png

image.png

  • NumChannels:声道数
  • SampleRate:采样率(Hz)
  • ByteRate:每秒多少个字节(Byte/s)
  • BitsPerSample:位深度
  • ByteRate = SampleRate * BitsPerSample * NumChannels / 8

3、查看WAV格式的音频文件

  • 我这里有一个WAV格式的音频文件, 使用Sublime Text打开查看二进制数据
  • 如果手里没有WAV格式的文件, 可以下载一个mp3格式的文件, 然后使用ffmpeg转成WAV格式
# 将MP3文件转成WAV文件
ffmpeg -i xx.mp3 yy.wav
  • 使用Sublime Text打开WAV格式的音频文件, 我是用了插件HexViewer

image.png

image.png

  • 其中前44个字节如下
5249 4646 64de d102 5741 5645 666d 7420 1000 0000 0100 0200 
44ac 0000 10b1 0200 0400 1000 4c49 5354 7c00 0000
  • 其中17-36全部都是小端模式, 所以值分别为

  • 17-20: 0000 0010 = 16, 位深度(Subchunk1Size)

  • 21-22: 0001 = 1, 格式(PCM)

  • 23-24: 0002 = 2, 声道数(NumChannels)

  • 25-28: 0000 ac44 = 44100, 采样率(SampleRate)

  • 29-32: 0002 b110 = 176400, 比特率(ByteRate)

  • 每秒字节数 = 比特率 / 8 = 采样率 * 位深度 * 声道数 / 8 = 44100 * 2 * 16 / 8 = 176400

四、有损和无损

  • 根据采样率和位深度可以得知:相对于自然界的信号,音频编码最多只能做到无限接近,任何数字音频编码方案都是有损的,因为无法完全还原。目前能够达到最高保真水平的就是PCM编码,因此,PCM约定俗成叫做无损音频编码,被广泛用于素材保存及音乐欣赏,CD、DVD以及常见的WAV文件中均有应用。
  • 但并不意味着PCM就能够确保信号绝对保真,PCM也只能做到最大程度的无限接近。我们习惯性的把MP3列入有损音频编码范畴,是相对于PCM编码的。要做到真正的无损是困难的,就像用数字去表达圆周率,不管精度多高,也只是无限接近,而不是真正等于圆周率的值。