java获取MP3文件的id3信息(包括封面图,歌词,艺术家,标题等)
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信息(包括封面图,歌词,艺术家,标题等)相关推荐
- java获取MP3文件信息(歌手,歌名,封面,专辑,时长)
可以用本地的文件地址测试(令url=文件地址) package com.test.inside.util;import org.jaudiotagger.audio.AudioFileIO; impo ...
- java mp3 信息_android,java获取MP3文件信息(作者,专辑等)
接着上一篇文章, 上一篇把ndk开发遍历手机文件分享了一下.遍历出来的MP3文件,我需要展示在android的listview里面,想展示的好看一点,结果发现又是一个坑. 根据mp3文件,获取作者啊专 ...
- java读取mp3文件信息_用JAVA读取MP3文件的标签信息
突然看到网上有人在用JavaScript来读取MP3中ID3信息.详细请看! 我也在网上搜索了用Flex写的实现同样的功能的.详细请看! 但是我比较熟悉Java.所以也在网上搜索到了用Java实现的读 ...
- java mp3 信息_如何用Java读取MP3文件的Tag信息
展开全部 以随机读写方式打开一个MP3文件 将文件指针偏移量移动到文件长度倒数128位 判断标签头"TAG"是否存在 读取62616964757a686964616fe78988e ...
- 使用FFMpeg 获取MP3文件中的信息和图片
我们在播放音频文件时,如MP3格式的音频文件,一些播放器会显示音乐名称.专辑名称.歌手.音乐图像等信息,如下图片所示: 下面介绍使用FFMpeg来获取这些信息. 使用函数avformat_open_i ...
- Java获取MP3文件时长的几种方法
在网上找了很多方法,其中最匮乏的就是获取网络资源音频的时长,在这里总结一下: 1:获取网络资源音频时长: 这种方法是获取文件字节大小然后在用公式自己算的 BufferedInputStream bis ...
- java 获取mp3 id3v2_MP3文件的ID3V1信息与ID3V2信息结构的分析
MP3文件的ID3V1信息与ID3V2信息结构的分析 --吴俊涛2005/05/05 E-mail:bo_tao@126.com QQ:29248671 主 页:http://wjt276.home4 ...
- jaudiotagger获取MP3文件信息及封面图片
#jaudiotagger获取MP3文件信息及封面图片 ###maven依赖: <dependency><groupId>org</groupId><arti ...
- java 上传mp3文件大小,Java获取音频文件(MP3)的播放时长
最近的一个项目需要按照时间播放mp3文件,例如,播放10分钟的不同音乐. 这就意味着我得事先知道mp3文件的播放时长,以决定播放几遍这个文件. 方案一:Java的方式 找第三方的库,真的感谢这些提供j ...
最新文章
- Redis单例、主从模式、sentinel以及集群的配置方式及优缺点对比
- 从源码分析DEARGUI之add_window
- 2021合工大超越卷数二好题精选
- SAP Marketing和SAP Marketing Cloud的区别
- Oracle 11g DG主库节点2 ORA-00245: control file backup fail
- 史上最好记的神经网络结构速记表(上)
- solidity payable_以太坊区块链搭建与使用(五)-智能合约Solidity
- POE以太网交换机产品优势介绍
- 详解车道线检测数据集和模型 VIL-100: A New Dataset and A Baseline Model for Video Instance Lane Detection
- c#字符型转化为asc_C#字符串和ASCII码的转换
- 0924html小测答案
- Linux perf tools
- Qt4_使用QXmlStreamReader读取XML
- Web终端SSH功能
- ruby设计模式之观察者模式2————更加一般化的观察者模式
- WCDMA功率控制与BER/BLER
- 详解使用SSH远程连接Ubuntu服务器系统
- jemalloc疑似内存泄漏分析
- springcloud阿里巴巴五大组件_阿里巴巴内部独家微服务全解手册已“重现江湖”大厂核心技术,你确定不了解一下?...
- 黑客四种常用来攻击云服务器的手段