5

如何从 AMR-NB 文件中提取采样率、比特率等信息。严格来说,我想要采样率或任何其他可能改变其音高或速度的数据。

WAV 文件很容易,但在这里我受限于 AMR-NB 格式(J2me 设备)

我在谷歌上搜索了很多,但找不到任何东西......

AMR-NB 是固定在 8Khz 的吗?或者它随每个样本而变化?

4

1 回答 1

2

根据 AMR 文件格式位于:http: //developer.nokia.com/community/wiki/AMR_formatAMR 文件有一个 6 字节的头,后面跟着一组音频帧,每个帧都有一个 1 字节的头。每个音频帧的长度为 20 毫秒,并且采样率在每个帧的标题中给出。所以要读取第一帧的采样率,您需要读取文件中的第 7 个字节。取第 7 个字节并将其右移 3 位,并屏蔽掉新值的低 4 位。在 java 中,这是“((value>>3)& 0x0F)”,其中 value 是帧的 1 字节标头。然后对照下表检查该数字以确定该帧的比特率。然后由于每帧的长度为 20 毫秒,因此您需要将比特率(它们以 kb/s 的形式给出,因此将该数字乘以 1000 以获得每秒的比特数)除以 20 并除以((每字节 8 位)* 1000 毫秒每second) = 8000 以获取下一帧头要跳过的字节数。如果要修改框架的内容,只需按顺序将框架重新复制到新文件,但用旧框架替换新框架。临时文件对此很有用。我已经从下面的源页面复制了比特率表以供参考。

0 - AMR 4.75 - 以 4.75kbit/s 编码

1 - AMR 5.15 - 以 5.15kbit/s 编码

2 - AMR 5.9 - 以 5.9kbit/s 编码

3 - AMR 6.7 - 以 6.7kbit/s 编码

4 - AMR 7.4 - 以 7.4kbit/s 编码

5 - AMR 7.95 - 以 7.95kbit/s 编码

6 - AMR 10.2 - 以 10.2kbit/s 编码

7 - AMR 12.2 - 以 12.2kbit/s 编码

于 2012-11-15T14:01:38.213 回答