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

标签 java audio amr file-structure audioformat

我如何从 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/

相关文章:

android - 如何在android中发送smack中的音频文件

iphone - 适用于iPhone的AMR编码器

windows-phone-7 - 如何录制音频AMR格式?

java - 如何通过Spring boot查询一个区域内的点?

Java的转换和C++的转换

c++ - 使用 FFT 的移频器

algorithm - 实现 AMR 编码器

java - 表达式的类型必须是数组类型,但它解析为 BufferedImage

java - 如何加载从 ObjectInputStream 读取对象时找不到的类

android - 如何一个接一个地播放音频文件