如何从AMR-NB文件中提取采样率,比特率等信息。 严格来说,我想要采样率或任何其他可能改变其音高或节奏的数据。
WAV文件很容易,但在这里我受到AMR-NB格式(J2me设备)的限制
我在谷歌上搜索了很多但却无法得到任何东西......
AMR-NB是否固定在8Khz?或者每个样本都有所不同?
答案 0 :(得分:2)
根据AMR文件格式:http://developer.nokia.com/community/wiki/AMR_format AMR文件有一个6字节的标题,后跟一组音频帧,每个帧都有一个1字节的标题。每个音频帧长20毫秒,并且每帧的标题中都有采样率。因此,要读取第一帧的采样率,您需要读取文件中的第7个字节。取第7个字节并将其右移3位,并屏蔽新值的低4位。在java中,这是“((value>>>>>< 0x0F)”其中value是帧的1字节头。然后根据下表检查该数字,以确定该帧的比特率。那么由于每帧长度为20ms,你需要将比特率(它们以kb / s为单位乘以该数字乘以1000以得到每秒比特数)乘以20并除以((每字节8位)* 1000ms每个帧) 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的编码