我如何从 AMR-NB 文件中提取采样率、比特率等信息。 严格来说,我想要采样率或任何其他可能改变其音调或速度的数据。
WAV 文件很容易,但在这里我受限于 AMR-NB 格式(J2me 设备)
我在谷歌上搜索了很多,但找不到任何东西......
AMR-NB 固定在 8Khz 吗?还是随每个样本而变化?
最佳答案
根据 AMR 文件格式:http://developer.nokia.com/community/wiki/AMR_format AMR 文件有一个 6 字节的 header ,后面跟着一组音频帧,每个帧都有一个 1 字节的 header 。每个音频帧长 20 毫秒,采样率在每个帧的 header 中给出。所以要读取第一帧的采样率,您需要读取文件中的第 7 个字节。取第 7 个字节右移 3 位,屏蔽掉新值的低 4 位。在 Java 中,这是“((value>>3)& 0x0F)”,其中 value 是帧的 1 字节 header 。然后对照下表检查该数字以确定该帧的比特率。然后由于每个帧的长度为 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 编码
关于java - 如何读取和修改amr音频文件数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11087207/