AMR 语音编码基础

从 AMR-NB、AMR-WB 到帧类型、模式和文件结构

Posted by Yvain Zhang on January 21, 2022 主题:技术

AMR 这种格式,很多人不是在音乐播放器里认识它的,而是在通话、录音、移动设备或者语音链路里碰到它。
它和 MP3、AAC 这类“通用媒体编码”不太一样,AMR 从一开始就更偏向语音场景。

1. AMR 为什么和别的音频编码不一样

AMR 的全称是 Adaptive Multi-Rate。它的设计重点不是追求音乐场景里的高保真,而是把人声通信做得更划算。

因此它最典型的特点是:

  • 主要针对语音
  • 比特率可以自适应切换
  • 压缩比高
  • 在移动通信场景里很常见

这决定了它特别适合:

  • 通话
  • 语音记录
  • 无线网络条件波动明显的场景

2. AMR-NB 和 AMR-WB 分别是什么

AMR 最常见可以先分成两类:

AMR-NB

NB 是 narrow-band,采样率通常是 8kHz,主要覆盖传统语音电话那类窄带场景。

AMR-WB

WB 是 wide-band,采样率通常是 16kHz,语音带宽更宽,听感也更自然。

从用户体验上说,WB 相比 NB 更接近“宽带语音”,在语音清晰度和自然度上一般会更好。

3. 为什么叫 Adaptive Multi-Rate

这个名字本身已经把它的关键能力写出来了:

  • Multi-Rate:有多种编码模式 / 比特率
  • Adaptive:可以根据链路条件和系统策略切换模式

这点在无线通信里很有价值。因为真实网络并不稳定,链路条件一差,系统往往不能只盯着“最高音质”,还要考虑:

  • 抗干扰
  • 语音可懂度
  • 带宽占用

4. AMR 文件和 AMR 帧先分开看

和很多音频格式一样,调试时最好把两层分开:

  • 文件层面怎么组织
  • 帧层面怎么编码

文件通常可以先粗看成:

  • 文件头
  • 一帧一帧的语音数据

而真正的语音处理单位,是后面这些 speech frame。

5. 一帧里最关键的是什么

AMR 帧里最关键的几个概念通常是:

  • Frame Type
  • Frame Quality Indicator
  • 语音比特数据

Frame Type

它决定当前帧用的是哪一种编码模式。不同模式通常对应不同码率和不同大小的比特负载。

Frame Quality Indicator

它用来表示当前帧质量是否可信。工程里这很重要,因为有些帧即使收到了,也可能已经损坏。

6. Class A / B / C 为什么值得注意

AMR 的比特并不是“一视同仁”的。它会把同一帧里不同重要程度的数据分成不同等级。

通常可以理解成:

  • Class A:最关键,坏了通常整帧都难救
  • Class B:次关键
  • Class C:相对不敏感

这套分级特别适合无线传输,因为系统可以优先保护最重要的那部分比特,而不是所有数据一刀切地同等对待。

7. IF1 和 IF2 是什么

AMR 里常见会提到 IF1 和 IF2,这本质上是不同的帧打包 / 交换格式。

从工程角度看,没必要一开始就陷进每一位怎么排。更值得先理解的是:

  • 它们都是在描述 AMR 帧怎么装配和传输
  • 不同接口或实现里会选不同表示方式
  • 如果你要做文件解析、网口抓包分析或协议适配,就必须知道当前走的是哪种格式

8. AMR 文件头通常表示什么

AMR 文件往往会有一个 magic number,用来声明:

  • 这是 AMR 文件
  • 具体是 NB 还是 WB

解析器通常先读这个头,再决定后面每帧按什么方式解释。

所以如果出现“扩展名是 .amr 但播放器不认”这种情况,优先不能只看后缀,而要看头部是不是规范。

9. 工程里最常见的几个问题

录音能保存,但转码失败

先查:

  • 是 NB 还是 WB
  • 帧类型是否连续可识别
  • 文件头是否正确

播放有杂音或中间断续

常见方向:

  • 帧边界切错
  • 帧类型解释错
  • 损坏帧没有正确处理

网络传输里听感突然变差

这时经常要看:

  • 模式是否切到了更低码率
  • 当前链路是否有明显误码或丢包
  • 关键 Class A 数据是否受损

10. AMR 适合什么,不适合什么

AMR 的强项很明确:

  • 语音
  • 通信
  • 低带宽

它并不是拿来和高质量音乐编码正面竞争的。
如果拿它去压普通音乐或复杂音频内容,通常不会是最优选择。

11. 总结

理解 AMR,最值得抓住的其实就四件事:

  • 它主要服务语音场景
  • NB 和 WB 分别对应不同语音带宽
  • 一帧里有模式、质量指示和分级重要数据
  • 文件层和帧层要分开看

把这几条线理顺之后,后面无论是看抓包、读录音文件,还是调语音链路问题,都会更容易找到正确落点。