数字音频基础与处理流程

从采样率、位深到解复用、解码与播放链路

Posted by Yvain Zhang on February 18, 2021 主题:技术

很多人学数字音频时,难点往往不是公式,而是概念层次太多:采样率、位深、PCM、WAV、AAC、MP3、容器、编码、解码,单独看都不陌生,放在一起就容易混。

这篇先不铺太多术语,先把最基础的参数、常见格式和处理链路理顺。

1. 数字音频的四个基础参数

理解数字音频,先抓住四个核心参数:

  • 采样率
  • 采样位深
  • 声道数
  • 比特率

这四个参数基本对应四个问题:一秒钟采多少次样、每个采样点保留多少精度、同时有几路独立声音、单位时间里需要多少数据量。

采样率

采样率表示每秒钟对模拟信号取样的次数,单位通常是 Hz。常见值有:

  • 8 kHz:电话语音
  • 16 kHz:语音算法常见
  • 44.1 kHz:CD 音频
  • 48 kHz:视频和专业链路常见
  • 96 kHz / 192 kHz:更高规格音频场景

采样率越高,理论上能保留的高频信息越多,但体积和处理成本也会一起上去。

理解时还可以先记一个基本结论:采样率至少要大于信号最高频率的两倍,才更有可能比较完整地还原原始信号。

位深

位深表示每个采样点用多少 bit 描述振幅。常见情况包括:

  • 16-bit:消费级场景最常见
  • 24-bit:专业音频常见
  • 32-bit float:更适合音频处理链路

位深越高,动态范围通常越大,细节保留能力也越强。

声道数

声道数描述同一时刻有几路独立通道:

  • Mono:单声道
  • Stereo:双声道
  • 5.1 / 7.1:多声道

比特率

对 PCM 这类未压缩音频,可以先用一个近似公式理解:

比特率 = 采样率 × 位深 × 声道数

所以 48 kHz、16-bit、双声道 PCM 的数据量,明显会高于 16 kHz、16-bit、单声道语音流。

2. 为什么很多链路最后都要落到 PCM

PCM 是最直接的采样数据表达方式,本身不追求压缩率,但很适合作为处理链路里的基础格式。

大多数播放设备、音频算法和处理中间环节,最终都更容易消费 PCM。也正因为这样,很多压缩格式最后都要先解码成 PCM,再送到:

  • 播放设备
  • 音频特效链
  • 语音算法
  • 转码处理链

如果只记一件事,可以先记住:很多编码格式最后还是要回到 PCM。

3. 为什么要做音频编码

既然 PCM 这么直接,为什么还要编码?答案很简单:PCM 数据量太大,存储和传输成本高。

音频编码做的事情,本质上就是压缩数据,降低带宽和存储开销。很多有损编码之所以能在较低码率下还保持可接受听感,就是因为它们会利用时域冗余、频域冗余以及听觉冗余。

这也是为什么同样一段音频,压缩成 AAC、MP3、Opus 之后,体积能比原始 PCM 小很多。

4. 容器和编码不要混淆

这是最容易混淆的一组概念:

  • 容器:负责“装”数据
  • 编码:负责“压缩和表示”数据

例如:

  • WAV、MP4、TS、MKV 是容器
  • PCM、AAC、MP3、Opus 是编码格式

一个 MP4 文件里可能有视频流和音频流;一个 WAV 文件里常见的是 PCM;一个 M4A 文件里常见的是 AAC。

所以看到文件后缀,先判断容器;分析播放或转码问题时,再继续看里面的编码格式。

5. 常见格式该怎么理解

PCM

原始采样数据,不压缩,保真度高,适合作为算法和播放链路的基础格式。

WAV

一个很常见的容器,通常承载 PCM,也可以承载别的音频编码。它的好处是结构清楚、调试友好,而且文件头里通常会带上采样率、位深、声道数这些信息。

MP3

经典有损压缩格式,兼容性很好,应用范围也很广。

AAC

现代多媒体场景里非常常见,在中低码率下通常比 MP3 更有优势。

Opus

更偏低延迟、实时通信和语音场景,在互动式链路里很常见。

6. 一个典型的音频处理流程

工程里一个常见处理链路通常是:

  1. 获取输入
  2. 解复用
  3. 解码
  4. 输出 PCM
  5. 播放或继续处理

获取输入

输入可能来自:

  • 本地文件
  • 网络流
  • 麦克风采集
  • 视频容器里的音轨

解复用

如果音频被封装在 MP4、TS、MKV 这类容器里,先要把音频流拆出来。

解码

如果音频本身是 AAC、MP3、Opus 这类压缩格式,就需要解码成 PCM 或其他中间格式。

输出

输出之后可能是:

  • 直接播放
  • 重采样
  • 混音
  • 送给语音识别或降噪模块

7. 学音频时最值得先抓住什么

刚开始学音频,不用急着背完所有格式。先把这几层关系建立起来:

  • 参数层:采样率、位深、声道数、码率
  • 数据层:PCM
  • 容器层:WAV / MP4 / TS
  • 编码层:AAC / MP3 / Opus
  • 流程层:解复用 -> 解码 -> PCM -> 播放 / 处理

这几层一旦理顺,后面再去看 FFmpeg、播放器、流媒体协议或者音频驱动,很多原本分散的概念就能自然连起来。

8. 总结

数字音频的底层其实不复杂:

  • 先把模拟信号数字化
  • 再根据场景决定是否压缩
  • 最终在处理链路里回到便于播放和计算的格式

比死记术语更重要的,是随时分清你现在碰到的是参数问题、容器问题、编码问题,还是处理流程问题。