如何读取和修改amr音频文件数据?

use*_*559 5 java audio file-structure amr audioformat

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

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

我在谷歌上搜索了很多但却无法得到任何东西......

AMR-NB固定在8Khz?或者每个样品都有所不同?

小智 2

根据 AMR 文件格式: http: //developer.nokia.com/community/wiki/AMR_format AMR 文件有一个 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 编码