【开源技术分享】Java读写操作Mp3的库:MP3AGIC,使用MP3AGIC获取ID3v1值和获取ID3v2专辑封面和修改ID3v2封面图片等mp3信息

news/2024/12/22 23:57:12/

介绍

mp3agic是一个纯Java库。用于读取mp3文件和读取/操作ID3标签(ID3v1和ID3v2.2到ID3v2.4),可以使用 ID3 标签中的详细信息重命名 mp3 文件、重新标记 mp3 文件、将图像附加到 mp3 文件以及从 mp3 文件中提取图像等等任务。

mp3文件尾部标签介绍

mp3音乐文件的有三种尾部标签,分别是:ID3v1,ID3v2,APEv2这三种类型

  1. ID3v1位于文件尾部,不支持封面,不支持一些特殊字符,长度短,但兼容老设备。

  2. ID3v2是ID3v1的后继替代者,位于文件头部,支持封面和特殊字符,长度任意。

  3. APEv2位于文件尾部(同时与ID3v1存在时,在ID3v1之前),同样支持封面和特殊字符,但不推荐用于mp3。

mp3agic依赖

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

官方维护地址

https://github.com/mpatric/mp3agic

使用示例

打开mp3文件

Opening an mp3 file
Mp3File mp3file = new Mp3File("eguid.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"));

保存MP3文件

mp3file.save("MyMp3File.mp3");

删除ID3和自定义标签

Mp3File mp3file = new Mp3File("eguid.mp3");
if (mp3file.hasId3v1Tag()) {mp3file.removeId3v1Tag();
}
if (mp3file.hasId3v2Tag()) {mp3file.removeId3v2Tag();
}
if (mp3file.hasCustomTag()) {mp3file.removeCustomTag();
}
mp3file.save("eguidMp3FileWithoutTags.mp3");

获取ID3v1的值

Mp3File mp3file = new Mp3File("eguid.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());
}

设置ID3v1的值

Mp3File mp3file = new Mp3File("SomeMp3File.mp3");
ID3v1 id3v1Tag;
if (mp3file.hasId3v1Tag()) {id3v1Tag =  mp3file.getId3v1Tag();
} else {// mp3 does not have an ID3v1 tag, let's create one..id3v1Tag = new ID3v1Tag();mp3file.setId3v1Tag(id3v1Tag);
}
id3v1Tag.setTrack("5");
id3v1Tag.setArtist("An Artist");
id3v1Tag.setTitle("The Title");
id3v1Tag.setAlbum("The Album");
id3v1Tag.setYear("2001");
id3v1Tag.setGenre(12);
id3v1Tag.setComment("Some comment");mp3file.save("MyMp3File.mp3");

获取 ID3v2专辑封面

Mp3File mp3file = new Mp3File("eguid.mp3");
if (mp3file.hasId3v2Tag()) {ID3v2 id3v2Tag = mp3file.getId3v2Tag();byte[] imageData = id3v2Tag.getAlbumImage();//获取封面图像if (imageData != null) {String mimeType = id3v2Tag.getAlbumImageMimeType();//获取封面图像mine-type扩展名// 写出图像到文件 - 可以从 MIME 类型确定适当的文件扩展名RandomAccessFile file = new RandomAccessFile("album-artwork", "rw");file.write(imageData);file.close();}
}

设置ID3v2字段的值

Mp3File mp3file = new Mp3File("eguid.mp3");
ID3v2 id3v2Tag;
if (mp3file.hasId3v2Tag()) {id3v2Tag = mp3file.getId3v2Tag();
} else {// mp3 does not have an ID3v2 tag, let's create one..id3v2Tag = new ID3v24Tag();mp3file.setId3v2Tag(id3v2Tag);
}
id3v2Tag.setTrack("5");
id3v2Tag.setArtist("An Artist");
id3v2Tag.setTitle("The Title");
id3v2Tag.setAlbum("The Album");
id3v2Tag.setYear("2001");
id3v2Tag.setGenre(12);
id3v2Tag.setComment("Some comment");
id3v2Tag.setLyrics("Some lyrics");
id3v2Tag.setComposer("The Composer");
id3v2Tag.setPublisher("A Publisher");
id3v2Tag.setOriginalArtist("Another Artist");
id3v2Tag.setAlbumArtist("An Artist");
id3v2Tag.setCopyright("Copyright");
id3v2Tag.setUrl("http://foobar");
id3v2Tag.setEncoder("The Encoder");
mp3file.save("eguid-mp3.mp3");

获取ID3v2字段的值

Mp3File mp3file = new Mp3File("eguid.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("是否有专辑图数据, length: " + albumImageData.length + " bytes");System.out.println("专辑图MIME类型的文件扩展名: " + id3v2Tag.getAlbumImageMimeType());}
}

http://www.ppmy.cn/news/866633.html

相关文章

服务器efi找不到硬盘,uefi启动找不到硬盘怎么办

每当我们在启动电脑的时候&#xff0c;选择启动项的时候&#xff0c;会看到一个uefi启动&#xff0c;其实是一种更便捷快速的电脑启动配置&#xff0c;主要负责开机时检测各种硬件功能&#xff0c;不过最近有些用户却在uefi启动中没有找到硬盘的存在&#xff0c;那么uefi启动找…

计算机找不到wlan,Win10网络设置找不到wlan选项怎么办?

最近一用户在Win10笔记本中设置网络时&#xff0c;找不到wlan选项&#xff0c;这是怎么回事呢&#xff1f;原因可能是无线服务未开启或者无线网卡驱动未安装&#xff0c;也可能是无线网络开关未开启&#xff0c;那么该如何解决这个问题呢&#xff1f;下面就给大家分享 Win10网络…

戴尔服务器找不到启动项,一个可以解决戴尔笔记本重装系统找不到引导或硬盘启动项方法...

戴尔电脑,在2016年以前重装可以使用比较简单的U盘或硬盘安装方式,但从2016后,新机型都采用 Intel 酷睿六代处理器,默认预装win10。由于win10的机型默认是UEFI引导,特别是intel 八代处理器以后的戴尔电脑将引导模式改成Legacy+MBR后发现启动时出现开机找不到硬盘或找不到引…

惠普电脑找不到计算机怎么办,hpwin10找不到启动设备怎么办_hpwin10找不到启动设备如何解决...

hpwin10系统时一款比较常见的品牌电脑了&#xff0c;性价比也是相当高的&#xff0c;然而最近有用户在使用hp电脑win10系统时&#xff0c;开机出现了找不到启动设备的提示&#xff0c;那么hpwin10找不到启动设备怎么办呢&#xff1f;对于这个问题&#xff0c;小编就来给大家说说…

计算机找不到网络设备,解决在设备管理器中找不到网卡的问题

解决在设备管理器中找不到网卡的问题 |主要症状: 在设备管理中&#xff0c;找不到网卡&#xff0c;并且无法使用驱动程序向导的通用网卡版本安装驱动程序 |解决方案: 1&#xff0c;首先确认是否有网卡 检查计算机设备接口是否具有RJ45网络电缆接口. 一般落后. 如下图所示: 2. 如…

管理计算机找不到应用程序,电脑联网时显示找不到应用程序怎么办

1. 电脑连WIFI时,总是显示找不到应用程序,这种情况是怎么回事 1. 确定FN快捷键已经打开,确定FN快捷键驱动,电源管理软件和无线网卡驱动正常安装; 2. 确认是否开启了硬件开关; 3. 确定在更改适配器设置中已经启用无线网络; 4. 开启网络连接相关服务。点击开始按钮,打开“控…

safari显示找不到服务器,苹果自带浏览器找不到服务器是什么问题

safari虽然只有苹果用户才能使用&#xff0c;但是随着苹果用户的增多&#xff0c;不少人遇到safari打不开网页的问题等&#xff0c;safari是苹果手机内置浏览器&#xff0c;在打开网页时经常会出现safari打不开网页因为服务器已停止响应提示&#xff0c;最简单的解决方法就是重…

笔记本重置找不到恢复环境_win10重置此电脑恢复环境找不到要如何处理

win10重置此电脑恢复环境找不到要如何处理  编辑:jiwei  阅读:9121  时间:2017-12-21 23:54:41 重置此电脑就是恢复出厂设置的意思,可以初始化当前的系统,重新安装Windows。在Win10的RE模式中的 疑难解答 里,可以让你“重置此电脑”或者“回到上一个系统”。最近有…