Android 获取amr音频文件时长

一个常量方法
/**
 * 得到amr的时长
 *
 * @param file
 * @return amr文件时间长度
 * @throws IOException
 */
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++;
        }
        // 帧数*20
        duration += frameCount * 20;
    } finally {
        if (randomAccessFile != null) {
            randomAccessFile.close();
        }
    }
    return (int)((duration/1000)+1);
}
发布了53 篇原创文章 · 获赞 8 · 访问量 7万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览