• 操作MP3文件的元数据


    参见:http://jingyan.baidu.com/article/03b2f78c4d5eae5ea237aee7.html

     

    一、MP3文件的元数据

    一个规则的MP3文件大致含有3个部分:

    • TAG_V2(ID3V2)
    • Frame
    • TAG_V1(ID3V1)

    其中,

    • TAG_V1的长度是固定的,128byte.期中包含MP3文件的基本信息.
    • TAG_V2扩展了TAG_V1,TAG_V2的长度不是固定的,包含了众多关于MP3文件信息

    TAG_V1中包含的信息
    TAG_V1部分是MP3文件的最后128byte的内容.期中包括的信息有:

    • 标签头"TAG" 3字节
    • 标题 30字节
    • 作者 30字节
    • 专辑 30字节
    • 出品年份 4字节
    • 备注信息 28字节
    • 保留 1字节
    • 音轨 1字节
    • 类型 1字节

    常见到有人说获取不到MP3信息,或者获取到的信息是一堆乱码.

    解决办法将TAG_V1中的字节信息转换成字符串时没有指定字符编码(一般用"utf-8")而出现的;

    如果想获取关于MP3文件的更多信息,可以通过解析TAG_V2中的字节来获取.

    二、读取MP3文件的元数据

    1、基本实现思路

        1.以随机读写方式打开一个MP3文件

        2.将文件指针偏移量移动到文件长度倒数128位

        3.判断标签头"TAG"是否存在

        3.读取TAG_V1中的各个内容

        4.关闭文件

    2、一个MP3文件的TAG_V1部分信息

    byte buf = new byte[128];//初始化标签信息的byte数组
    RandomAccessFile raf = new RandomAccessFile(mp3, "r");//随机读写方式打开MP3文件
    raf.seek(raf.length() - 128);//移动到文件MP3末尾
    raf.read(buf);//读取标签信息
    raf.close();//关闭文件
    if(buf.length != 128){//数据长度是否合法
    throw new Exception("MP3标签信息数据长度不合法!");
    }
    if(!"TAG".equalsIgnoreCase(new String(buf,0,3))){//标签头是否存在
    throw new Exception("MP3标签信息数据格式不正确!");
    }

    3、获得TAG_V1中的各个内容

    String SongName = new String(buf,3,30,"utf-8").trim();//歌曲名称
    String Artist = new String(buf,33,30,"utf-8").trim();//歌手名字
    String Album = new String(buf,63,30,"utf-8").trim();//专辑名称
    String Year = new String(buf,93,4,"utf-8").trim();//出品年份
    String Comment = new String(buf,97,28,"utf-8").trim();//备注信息

    三、修改MP3文件的元数据

  • 相关阅读:
    [Vim].vimrc
    [笔试面试][code_by_hand]压缩字符串
    [笔试面试][code_by_hand]输出第二个字符串在第一个字符串中的连接次序
    [笔试面试]串s1="ABCDACDAE" s2="DAE" 找出s1中,包含s2的最小子串,要求该子串含有s2中的所有字符,串内字符无顺序关系
    [笔试面试][code_by_hand]从二元树中找出和为某一值的所有路径
    DEV 皮肤的使用
    Dev GridControl使用小结
    [转载]DEV控件:gridControl常用属性设置
    C#网页 自动登录 提交POST信息 方法
    比较字符串NSString
  • 原文地址:https://www.cnblogs.com/lexiaofei/p/7634295.html
Copyright © 2020-2023  润新知