Java读取MP3文件的信息(歌曲名,歌手...)

2025-09-25 06:49:59

    还记得之前写一款Android播放软件时,为了让APP获得MP3音乐文件的相关信息,上网找了很多Java库.搞的APP满身赘肉.后来我研究了一下MP3文件的结构后发现,获取MP3文件信息根本不需要什么复杂的代码或者什么高深的Java库.完全是几行代码就可以搞定的事情.

1.MP3文件结构的简单介绍

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

    TAG_V2(ID3V2)

    Frame

    TAG_V1(ID3V1)

Java读取MP3文件的信息(歌曲名,歌手...)

    其中TAG_V2和TAG_V1这两个部分MP3文件标签信息(歌手,歌曲名,发行时间..)保存的区域

     在这两个部分中,TAG_V2的长度不是固定的,包含了众多关于MP3文件的信息

    而TAG_V1的长度是固定的,128byte.期中包含MP3文件的基本信息.

    本片经验获取的MP3文件的信息就是从TAG_V1中获取的.

2.TAG_V1中包含了什么信息

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

        标签头"TAG"    3字节

        标题            30字节

        作者            30字节

        专辑            30字节

        出品年份        4字节

        备注信息        28字节

        保留            1字节

        音轨            1字节

        类型            1字节

3.基本实现思路

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

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

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

    3.读取TAG_V1中的各个内容

    4.关闭文件

4.读入一个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标签信息数据格式不正确!");

    }

5.获得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();//备注信息

6.完整代码

    这是一个获取MP3文件信息的类的完整代码:(源码可在我的百度网盘下载http://pan.baidu.com/s/1kTFlLx9

Java读取MP3文件的信息(歌曲名,歌手...)

7.注意事项

    我在网上看到过类似获取MP3信息的代码,在那些代码的评论中,常见到有人说获取不到MP3信息,或者获取到的信息是一堆乱码.出现这种情况的95%都是在将TAG_V1中的字节信息转换成字符串时没有指定字符编码(一般用"utf-8")而出现的;

8.拓展

    如果你还想获取关于MP3文件的更多信息,可以通过解析TAG_V2中的字节来获取.(由于本人的知识面有限,没有对TAG_V2有过多的研究).大家可以在网络上学习关于TAG_V2的结构,然后解析TAG_V2中的内容.

The End

@航行刘 2014/05/11

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢