MP3结构简单介绍

有时我们会发现MP3文件在电脑上可以显示出封面图,艺术家,标题,唱片集等等信息,这是因为MP3中有ID3标签信息。

MP3文件大体上分为三个部分:ID3V2+音频数据+ID3V1 , ID3V2在MP3文件的头部,ID3V1在尾部,都是用来补充说明这个MP3文件的

mp3文件构成

名称 说明
ID3V2 位于MP3文件首部,包含作者、作曲、专辑等信息、长度不固定
音频数据 1.音频数据由一系列的数据帧构成
2.每个帧的长度可能固定可能不固定,由位率决定
3.每个帧都包括帧头、数据实体两部分
4.帧头记录着mp3的位率、采样率、版本等信息
5.如果启用CRC校验,则帧头后跟随2字节CRC校验,之后可能存在32字节的附加信息,也可能无附加信息
ID3V1 Mp3文件末尾的固定128字节,包含作者作曲专辑等
说明信息 有些MP3文件可能会有一些额外的说明信息(不重要)

java获取MP3文件的ID3信息

要求jdk1.8及以上

引入Maven依赖

<dependency><groupId>com.mpatric</groupId><artifactId>mp3agic</artifactId><version>0.9.1</version>
</dependency>

获取ID3v1信息

Mp3File mp3file = new Mp3File("SomeMp3File.mp3");
if (mp3file.hasId3v1Tag()) {ID3v1 id3v1Tag = mp3file.getId3v1Tag();System.out.println("Track: " + id3v1Tag.getTrack());System.out.println("Artist: " + id3v1Tag.getArtist());System.out.println("Title: " + id3v1Tag.getTitle());System.out.println("Album: " + id3v1Tag.getAlbum());System.out.println("Year: " + id3v1Tag.getYear());System.out.println("Genre: " + id3v1Tag.getGenre() + " (" + id3v1Tag.getGenreDescription() + ")");System.out.println("Comment: " + id3v1Tag.getComment());
}

获取ID3v2信息

Mp3File mp3file = new Mp3File("SomeMp3File.mp3");
if (mp3file.hasId3v2Tag()) {ID3v2 id3v2Tag = mp3file.getId3v2Tag();System.out.println("Track: " + id3v2Tag.getTrack());System.out.println("Artist: " + id3v2Tag.getArtist());System.out.println("Title: " + id3v2Tag.getTitle());System.out.println("Album: " + id3v2Tag.getAlbum());System.out.println("Year: " + id3v2Tag.getYear());System.out.println("Genre: " + id3v2Tag.getGenre() + " (" + id3v2Tag.getGenreDescription() + ")");System.out.println("Comment: " + id3v2Tag.getComment());System.out.println("Lyrics: " + id3v2Tag.getLyrics());System.out.println("Composer: " + id3v2Tag.getComposer());System.out.println("Publisher: " + id3v2Tag.getPublisher());System.out.println("Original artist: " + id3v2Tag.getOriginalArtist());System.out.println("Album artist: " + id3v2Tag.getAlbumArtist());System.out.println("Copyright: " + id3v2Tag.getCopyright());System.out.println("URL: " + id3v2Tag.getUrl());System.out.println("Encoder: " + id3v2Tag.getEncoder());byte[] albumImageData = id3v2Tag.getAlbumImage();if (albumImageData != null) {System.out.println("Have album image data, length: " + albumImageData.length + " bytes");System.out.println("Album image mime type: " + id3v2Tag.getAlbumImageMimeType());}
}

删除ID3信息,保存到新的文件

    public static void main(String[] args) throws Exception {Mp3File mp3file = new Mp3File("C:\\Users\\wangz\\Desktop\\去除ID3前.mp3");System.out.println("Length of this mp3 is: " + mp3file.getLengthInSeconds() + " seconds");System.out.println("Bitrate: " + mp3file.getBitrate() + " kbps " + (mp3file.isVbr() ? "(VBR)" : "(CBR)"));System.out.println("Sample rate: " + mp3file.getSampleRate() + " Hz");System.out.println("Has ID3v1 tag?: " + (mp3file.hasId3v1Tag() ? "YES" : "NO"));System.out.println("Has ID3v2 tag?: " + (mp3file.hasId3v2Tag() ? "YES" : "NO"));System.out.println("Has custom tag?: " + (mp3file.hasCustomTag() ? "YES" : "NO"));if (mp3file.hasId3v1Tag()) {mp3file.removeId3v1Tag();}if (mp3file.hasId3v2Tag()) {mp3file.removeId3v2Tag();}if (mp3file.hasCustomTag()) {mp3file.removeCustomTag();}// 将ID3信息去除,并保存到一个新文件mp3file.save("C:\\Users\\wangz\\Desktop\\去除ID3后.mp3");}

更多ID3操作api请访问:mp3agic

java获取MP3文件的id3信息(包括封面图,歌词,艺术家,标题等)相关推荐

  1. java获取MP3文件信息(歌手,歌名,封面,专辑,时长)

    可以用本地的文件地址测试(令url=文件地址) package com.test.inside.util;import org.jaudiotagger.audio.AudioFileIO; impo ...

  2. java mp3 信息_android,java获取MP3文件信息(作者,专辑等)

    接着上一篇文章, 上一篇把ndk开发遍历手机文件分享了一下.遍历出来的MP3文件,我需要展示在android的listview里面,想展示的好看一点,结果发现又是一个坑. 根据mp3文件,获取作者啊专 ...

  3. java读取mp3文件信息_用JAVA读取MP3文件的标签信息

    突然看到网上有人在用JavaScript来读取MP3中ID3信息.详细请看! 我也在网上搜索了用Flex写的实现同样的功能的.详细请看! 但是我比较熟悉Java.所以也在网上搜索到了用Java实现的读 ...

  4. java mp3 信息_如何用Java读取MP3文件的Tag信息

    展开全部 以随机读写方式打开一个MP3文件 将文件指针偏移量移动到文件长度倒数128位 判断标签头"TAG"是否存在 读取62616964757a686964616fe78988e ...

  5. 使用FFMpeg 获取MP3文件中的信息和图片

    我们在播放音频文件时,如MP3格式的音频文件,一些播放器会显示音乐名称.专辑名称.歌手.音乐图像等信息,如下图片所示: 下面介绍使用FFMpeg来获取这些信息. 使用函数avformat_open_i ...

  6. Java获取MP3文件时长的几种方法

    在网上找了很多方法,其中最匮乏的就是获取网络资源音频的时长,在这里总结一下: 1:获取网络资源音频时长: 这种方法是获取文件字节大小然后在用公式自己算的 BufferedInputStream bis ...

  7. java 获取mp3 id3v2_MP3文件的ID3V1信息与ID3V2信息结构的分析

    MP3文件的ID3V1信息与ID3V2信息结构的分析 --吴俊涛2005/05/05 E-mail:bo_tao@126.com QQ:29248671 主 页:http://wjt276.home4 ...

  8. jaudiotagger获取MP3文件信息及封面图片

    #jaudiotagger获取MP3文件信息及封面图片 ###maven依赖: <dependency><groupId>org</groupId><arti ...

  9. java 上传mp3文件大小,Java获取音频文件(MP3)的播放时长

    最近的一个项目需要按照时间播放mp3文件,例如,播放10分钟的不同音乐. 这就意味着我得事先知道mp3文件的播放时长,以决定播放几遍这个文件. 方案一:Java的方式 找第三方的库,真的感谢这些提供j ...

最新文章

  1. Redis单例、主从模式、sentinel以及集群的配置方式及优缺点对比
  2. 从源码分析DEARGUI之add_window
  3. 2021合工大超越卷数二好题精选
  4. SAP Marketing和SAP Marketing Cloud的区别
  5. Oracle 11g DG主库节点2 ORA-00245: control file backup fail
  6. 史上最好记的神经网络结构速记表(上)
  7. solidity payable_以太坊区块链搭建与使用(五)-智能合约Solidity
  8. POE以太网交换机产品优势介绍
  9. 详解车道线检测数据集和模型 VIL-100: A New Dataset and A Baseline Model for Video Instance Lane Detection
  10. c#字符型转化为asc_C#字符串和ASCII码的转换
  11. 0924html小测答案
  12. Linux perf tools
  13. Qt4_使用QXmlStreamReader读取XML
  14. Web终端SSH功能
  15. ruby设计模式之观察者模式2————更加一般化的观察者模式
  16. WCDMA功率控制与BER/BLER
  17. 详解使用SSH远程连接Ubuntu服务器系统
  18. jemalloc疑似内存泄漏分析
  19. springcloud阿里巴巴五大组件_阿里巴巴内部独家微服务全解手册已“重现江湖”大厂核心技术,你确定不了解一下?...
  20. 黑客四种常用来攻击云服务器的手段

热门文章

  1. 怎么搭建在线网校系统,靠谱的网校平台搭建开发公司
  2. 【HDL系列】除法器(3)——基2 SRT算法
  3. NTT(快速数论变换)模板
  4. 一个十年程序员写给大家的忠告
  5. VBA的form相关实验2,form里的变量传递和模块里有什么不同?(---未完成-----)
  6. opencv学习4——图像缩放
  7. snap学习之搭建lxc/lxd容器验证snap包
  8. numpy中ravel()与flatten()的区别
  9. 带你玩转超级列表框(1-4)雪山灵狐
  10. 腾讯云安装部署Linux保姆教程