`
zhubin215130
  • 浏览: 141542 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

利用《Java MP3 ID3 Tag Library》读取mp3文件ID3信息

    博客分类:
  • JAVA
阅读更多

 

《Java MP3 ID3 Tag Library》在这里:https://sourceforge.net/projects/javamusictag/

 

利用该lib可以读取音乐文件的ID3V1,ID3V2等信息,包括歌手名,歌曲名,专辑名,歌词流(如果有的话)等,功能还比较强大。

 

 

我在使用的过程中发现该lib读取信息时会导致中文乱码,于是通过代码追踪,找到了两处new String的地方,指定了编码,解决了该问题。

 

但是在sourceforge.net上我没有该lib的cvs commit权限,所以修改后的jar我只能在这里给出,希望能帮助到有需要的人。

 

 

使用范例:

 

 

 

import java.io.IOException;

import org.farng.mp3.MP3File;
import org.farng.mp3.TagException;
import org.farng.mp3.id3.AbstractID3v2;
import org.farng.mp3.id3.ID3v1;
import org.farng.mp3.lyrics3.AbstractLyrics3;

public class TestMP3 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		try {

			//MP3File file = new MP3File("c:\\TDDOWNLOAD\\shuangjiegun.mp3");//1,2
			MP3File file = new MP3File("c:\\TDDOWNLOAD\\1.mp3");//1,lyrics
			// MP3File file = new MP3File("/home/zhubin/Music/1.mp3");//1,lyrics
			AbstractID3v2 id3v2 = file.getID3v2Tag();
			ID3v1 id3v1 = file.getID3v1Tag();

			if (id3v2 != null) {

				System.out.println("id3v2");

				System.out.println(id3v2.getAlbumTitle());//专辑名
				System.out.println(id3v2.getSongTitle());//歌曲名
				System.out.println(id3v2.getLeadArtist());//歌手

			} else {
				System.out.println("id3v1");

				System.out.println(id3v1.getAlbumTitle());
				System.out.println(id3v1.getSongTitle());
				System.out.println(id3v1.getLeadArtist());

			}

			AbstractLyrics3 lrc3Tag = file.getLyrics3Tag();
			if (lrc3Tag != null) {
				String lyrics = lrc3Tag.getSongLyric();
				System.out.println(lyrics);
			}

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (TagException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		System.out.println("over");

	}


}

 

 

显示结果:

 

 

id3v1

依然范特西

听妈妈的话

周杰伦

[ti:听妈妈的话]

[ar:周杰伦]

[al:依然范特西]

[by:Hybert Kwok]

 

[00:00.11]听妈妈的话

[00:01.11]词:周杰伦 曲:周杰伦

[00:02.11]编曲:林迈可 洪敬饶 制作人:周杰伦

[00:04.11]和声编写:周杰伦 和声:周杰伦

[00:06.11]录音室:阿尔发录音室

[00:08.11]歌词录入:Hybert Kwok

[00:09.00]

[00:10.14]小朋友 你是否有很多问号

[00:12.76]为什么 别人在那看漫画

[00:15.39]我却在学画画 对着钢琴说话

[00:17.87]别人在玩游戏 我却靠在墙壁背我的ABC

[00:20.88]我说我要一台大大的飞机

[00:23.41]但却得到一台旧旧录音机

[00:25.98]为什么要听妈妈的话

[00:28.29]长大后你就会开始懂了这段话 哼

[03:15.77][00:30.76]长大后我开始明白

[03:18.74][00:33.73]为什么我 跑得比别人快

[03:20.15][00:35.14]飞得比别人高

[03:21.06][00:36.38]将来大家看的都是我画的漫画

[03:24.02][00:38.73]大家唱的都是 我写的歌

[03:26.81][00:41.45]妈妈的辛苦 不让你看见

[03:29.22][00:44.07]温暖的食谱在她心里面

[03:31.81][00:46.51]有空就多多握握她的手

[03:34.65][00:49.20]把手牵着一起梦游

[03:36.84][02:55.18][02:13.93][00:51.60]听妈妈的话 别让她受伤

[03:47.22][03:05.96][02:24.72][01:01.64]想快快长大 才能保护她

[03:57.60][02:34.66][01:11.43]美丽的白发 幸福中发芽

[04:07.82][02:45.16][01:22.46]天使的魔法 温暖中慈祥

[01:32.93]在你的未来 音乐是你的王牌

[01:34.71]拿王牌谈个恋爱

[01:36.18]唉!我不想把你教坏

[01:37.71]还是听妈妈的话吧

[01:39.02]晚点再恋爱吧

[01:40.46]我知道你未来的路

[01:42.59]但妈比我更清楚

[01:43.90]你会开始学其他同学

[01:45.03]在书包写东写西

[01:46.00]但我建议最好写妈妈

[01:47.60]我会用功读书

[01:48.73]用功读书 怎么会从我嘴巴说出

[01:50.84]不想你输 所以要叫你用功读书

[01:53.97]妈妈织给你的毛衣 你要好好的收着

[01:56.06]因为母亲节到的时候我要告诉她我还留着

[01:58.41]对了!我会遇到了周润发

[02:00.81]所以你可以跟同学炫耀

[02:01.88]赌神未来是你爸爸

[02:02.97]我找不到 童年写的情书

[02:05.44]你写完不要送人

[02:06.52]因为过两天你会在操场上捡到

[02:07.90]你会开始喜欢上流行歌

[02:11.31]因为张学友开始准备唱《吻别》

[04:22.93]END

over


 

 


4
1
分享到:
评论
14 楼 66jacky 2012-07-03  
请问,如果要把某些信息写tag或者修改tag怎么做?
13 楼 snowtree_ok 2012-04-11  
老大,id3v2还是乱码哦。id3v1你是怎么改的呢?能帮忙发一下吗?
12 楼 yuyuyc 2011-12-09  
  
11 楼 qianxueyiran 2011-10-12  
老大,能把修改后的jid3lib的源码发给我一份吗,我用你的jar包还是乱码,我想看看你是怎么修改的,找找思路。。。。多谢拉  我的邮箱mailliubin@gmail.com
10 楼 airpeng 2011-10-09  
import java.io.File;
import java.io.IOException;

import org.farng.mp3.MP3File;
import org.farng.mp3.TagConstant;
import org.farng.mp3.TagException;
import org.farng.mp3.TagOptionSingleton;
import org.farng.mp3.id3.ID3v1;

import com.whty.cloudsync.tools.FileEncodeDetector;

public class Demo {

	public static void main(String args[]) throws IOException, TagException {
		File file = new File("f:\\guiguiring.mp3");
		MP3File mp3file = new MP3File(file);
		ID3v1 id3v1 = mp3file.getID3v1Tag();
		if(id3v1==null){
			id3v1 = new ID3v1();
			mp3file.setID3v1Tag(id3v1);
		}
		TagOptionSingleton.getInstance().setDefaultSaveMode(
				TagConstant.MP3_FILE_SAVE_OVERWRITE);
		
		String encode = FileEncodeDetector.getFileEncode(file); 
		System.out.println(encode);
		String str = id3v1.getAlbumTitle();
		System.out.println(new String(str.getBytes("iso8859-1"),"GBK"));
		String albumTitle = new String("中国人,孔飞的铃声".getBytes("GBK"),"iso8859-1");
		System.out.println(albumTitle);
		// setup id3v1
		id3v1.setAlbum("albumTitle");
		id3v1.setSongTitle(albumTitle);
		id3v1.setLeadArtist("setLeadArtist");
		id3v1.setAlbumTitle(albumTitle);
		id3v1.setYearReleased("setYearReleased");
		id3v1.setSongComment("setSongComment");

		TagOptionSingleton.getInstance().setFilenameTagSave(true);

		mp3file.save();
	}
}


有兴趣的可以运行一下试试
9 楼 cookiejj2010 2011-09-27  
LZ ID3v2的中文乱码问题还是没有解决呢
8 楼 ld3862306 2011-09-09  
楼主,我用得还是乱码啊,

控制台输出


id3v2
?裏Z剉)n詆
?陙1u迾?
?銺餛 OGY
over
7 楼 tonyzzp 2011-09-03  

下了你的包
中文没乱码了。
6 楼 dingchuan 2011-08-01  
dingchuan 写道
我也发现有乱码,但我用公司电脑试就没乱码。
现在的问题是如何set进去自定义的文字,我set,但没成功,望楼主和各位指教

不好意思,才看到save方法。
5 楼 dingchuan 2011-08-01  
我也发现有乱码,但我用公司电脑试就没乱码。
现在的问题是如何set进去自定义的文字,我set,但没成功,望楼主和各位指教
4 楼 jianglinjun 2011-07-25  
lz..
ID3v1是转过来了..但是AbstractID3v2还是乱码...
我查了源文件, 为什么我用ISO-8859-1强转,还是不行...
望指教....
3 楼 aijezdm915 2011-07-20  
是啊,确实是中文乱码啊,希望博主传个没乱码的
2 楼 joe_zhpf 2010-04-26  
兄弟,非常感谢你的上传.但是你确定你没有上传错吗?怎么我用仍然不支持中文啊.
1 楼 empire_ghost 2010-04-25  
我用这个lib,读tag可以,写tag就不行了哈

相关推荐

    java计算MP3音乐时长(格式:00:04:20)

    2. **读取MP3文件**:使用`File`对象打开MP3文件。 ```java File mp3File = new File("path_to_your_mp3_file.mp3"); ``` 3. **解析ID3标签**:使用`TagLib`提供的API解析ID3标签。 ```java Tag tag = TagLibFactory...

    Mp3 ID3清除工具 delphi xe2代码

    ID3标签是MP3文件中用于存储元数据的一种标准,如艺术家、专辑、歌曲名称、歌词等信息。在数字音乐的领域,管理这些元数据对于组织和播放音乐库至关重要。Delphi是一种流行的Object Pascal编程环境,它允许开发者...

    mp3信息修改VB源码

    在VB中,修改MP3信息通常涉及读取和写入ID3标签。ID3标签是MP3文件中的元数据部分,包含了歌曲的各种信息,例如艺术家、专辑、歌曲标题、年份、流派等。VB可以通过特定的库或API来处理这些标签。例如,可以使用...

    TagID3_tagID3_

    标题中的"TagID3_tagID3_"暗示了我们讨论的主题是关于MP3文件中的ID3标签,这是一种元数据格式,通常用于存储音乐文件的相关信息,如艺术家、专辑、歌曲名称等。描述简单地指出我们要关注的是如何在MP3文件中查找ID3...

    ID3TagEditor:一个用于读写任何mp3文件的ID3标签的Swift库。 支持的ID3标签版本:2.2、2.3和2.4。 支持的平台:iOS,macOS,tvOS,watchOS,Linux Ubuntu

    ID3TagEditor 一个快速库,用于读取和修改任何mp3文件的ID3标签。 在的“实现”部分。安装有四种方法可以在项目中安装ID3TagEditor: 手动安装构架椰子纲Swift Package Manager(支持Linux平台) 手动安装要手动安装...

    ID3v2 Tag creation library for python-开源

    1. **读取标签**:能够读取MP3文件中的ID3v2.3标签信息,解析出各种元数据。 2. **写入标签**:允许用户修改或创建新的ID3v2.3标签,更新MP3文件的元数据。 3. **删除标签**:如果需要,可以完全移除MP3文件中的ID...

    JAVA上百实例源码以及开源项目源代码

    Java从网络取得文件 1个目标文件 简单 Java从压缩包中提取文件 1个目标文件 简单 Java存储与读取对象 1个目标文件 如题 Java调色板面板源代码 1个目标文件 摘要:Java源码,窗体界面,调色板 使用Java语言编写的一款...

    browser-id3-writer:用于将ID3标签写入浏览器和Node.js中的MP3文件的纯JS库:writing_hand:

    浏览器ID3编写器 用于在浏览器和Node.js中将标记写入MP3文件的纯JS库。 它无法读取标签,因此请使用另一个库来执行。 注意:该库将删除现有的ID3标签(v2.2,v2.3和v2.4)。 可在Node.js 4 +,IE10 +和所有现代...

    atl.zip_delphi_delphi audio_zip

    10. ID3v2:ID3标签是MP3文件的标准元数据格式,ID3v2是其较新的版本。这可能表示压缩包中有处理ID3v2标签的组件。 综合以上信息,这个压缩包是一个Delphi音频处理工具包,包括了对多种音频格式的支持,如TTA、CDDA...

    SWF:一些用于处理SWF文件的python脚本

    SWF文件的格式是二进制的,所以这些脚本可能会用到这两个库来读取和解析SWF文件的头部信息,识别文件版本、长度等关键数据。 2. **SWF文件结构**:SWF文件由一系列记录组成,每个记录包含一个或多个命令。理解这些...

    tomcat 变声源码

    JSP(JavaServer Pages)用于生成动态网页,需要了解EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)。 3. **Tomcat服务器**:熟悉Tomcat的结构和配置,包括web.xml文件的配置,以及...

    新版Android开发教程.rar

    � Google 提供了一套 Java 核心包 (J2SE 5,J2SE 6) 的有限子集,尚不承诺遵守 Java 任何 Java 规范 , 可能会造 成J ava 阵营的进一步分裂。 � 现有应用完善度不太够,需要的开发工作量较大。--------------------...

Global site tag (gtag.js) - Google Analytics