amr是3gpp开发的语音编码规范,初衷是用在3g语音通信,但没想到3g是如此的昙花一现。不过amr被2g、4g都采用并发扬光大,高压缩比下提供清晰的语音,令amr傲视其他的编码格式。不仅如此,应运而生的amr语音文件,也为录音和网络语音传输提供了很低的payload。一直很好奇这个语音文件的格式是啥样滴。于是收集网络信息,发现原来amr文件的组织来如此简单,
文件头
语音帧 1
语音帧 2
…
而对于单声道的文件头只是#!AMR\n
的ASCII码,宽带的是#!AMR-WB\n
。然后每帧有一个简单的帧头。复杂一点的是amr数据比特的排布,细节都在参考文档rfc4867的5. AMR and AMR-WB Storage Format
章节有详细描述,
只要记住
- 话音帧遵守
octet
对齐, octet
内遵守 big endian(最高位存最前面的比特),- 核心codec遵守3gpp的标准,
这三个原则,amr文件格式的阅读就没有困难了。
参考文档
3gpp ts26.101:
rfc4867:RTP Payload Format and File Storage Format for the Adaptive Multi-Rate (AMR) and Adaptive Multi-Rate Wideband (AMR-WB) Audio Codecs
AMR文件格式的解释
Conversion between AMR (Adaptive Multi-rate Codec) file formats