一人离去violet 2016-07-21 08:28 采纳率: 0%
浏览 1791

Java微信开发上传下载语音怎么获取amr语音的秒数,传给APP端

微信端发语音,微信显示语音的秒数,微信接收到语音也能显示秒数,怎么获得这个秒数?
查了很多资料例子 amr获取时长的例子,运行得到的与真实的秒数不符合:
用的方法是下面的:
public static int getAmrDuration(File file) throws IOException {
long duration = -1;
int[] packedSize = { 12, 13, 15, 17, 19, 20, 26, 31, 5, 0, 0, 0, 0, 0,
0, 0 };
RandomAccessFile randomAccessFile = null;
try {
randomAccessFile = new RandomAccessFile(file, "rw");
long length = file.length();// 文件的长度
int pos = 6;// 设置初始位置
int frameCount = 0;// 初始帧数
int packedPos = -1;

        byte[] datas = new byte[1];// 初始数据值
        while (pos <= length) {
            randomAccessFile.seek(pos);
            if (randomAccessFile.read(datas, 0, 1) != 1) {
                duration = length > 0 ? ((length - 6) / 650) : 0;
                break;
            }
            packedPos = (datas[0] >> 3) & 0x0F;
            pos += packedSize[packedPos] + 1;
            frameCount++;
        }

        duration += frameCount * 20;// 帧数*20
    } finally {
        if (randomAccessFile != null) {
            randomAccessFile.close();
        }
    }
    return (int)((duration/1000)+1);
}
  • 写回答

1条回答

  • zqbnqsdsmd 2017-03-05 15:47
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 slam rangenet++配置
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊