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

用java获取mp3文件播放时长和tag信息

    博客分类:
  • J2SE
阅读更多
需要从mp3文件拿到mp3播放时长,折腾了几个小时,绕了弯路,大致记录一下。

先是找到mp3fenge这个分割mp3文件的开源项目   http://code.google.com/p/mp3fenge/

发现用它的API得到trackLength对很多文件处理报错。在他的项目中看到jaudiotagger这个700多K的包,猜测其是解析mp3文件的主要处理库。但粗找了一下关于这个包的用法,没找到,于是找别的解析包。

一时间瞎试了好几个包 jlayer1.0.1.zip  mp3spi1.9.5.zip  jid3lib-0.5.4.zip 都有问题(走马观花的试用,多半是我用的有问题)。

用网上经典的那段代码

AudioFileFormat fileFormat = AudioSystem.getAudioFileFormat(file);
Map<?, ?> properties = fileFormat.properties();
Long ms = (Long) properties.get("duration");


一直报错。又看到很多帖子说是需要装 jmf,然后下载jmf-2_1_1e-alljava.zip安装还是报错。 最可恶是 oracle官网上说 jmf支持mp3格式,http://www.oracle.com/technetwork/java/javase/tech/index-jsp-140239.html

引用

MP3 support for JMF
We are excited to announce MP3 support for JMF! Please proceed to the download page to get your hands on this highly anticipated addition to JMF.


到下载页面  http://www.oracle.com/technetwork/java/javase/download-137625.html

引用
Unzip the JavaMP3plugin.zip in the JRE directory of your choice.
The included jar file (mp3plugin.jar) contains a Java Sound plugin as well as a Java Media Framework plugin for playing MPEG-2 Layer 3 Audio.


进入download链接,竟然找不到 JavaMP3plugin.zip 的下载。

google了半天也没找到JavaMP3plugin的下载和资料,只要作罢。


最后,冷静下来,专心找 jaudiotagger 包的资料,找到项目主页http://www.jthink.net/jaudiotagger/
下载 jaudiotagger-2.0.4-20111207.115108-15 这个版本
简单的几行代码

	public static int getMp3TrackLength(File mp3File) {
		try {
			MP3File f = (MP3File)AudioFileIO.read(mp3File);
			MP3AudioHeader audioHeader = (MP3AudioHeader)f.getAudioHeader();
			return audioHeader.getTrackLength();	
		} catch(Exception e) {
			return -1;
		}
	}


就搞定了!
原来不能解析的mp3文件测试都通过。也不用装什么JMF,只需要包含这一个包即可。

另外,jaudiotagger用的是jdk的logging,我还不会设置jdk log的全局级别(如有知道者请告知) 就使用了

		AudioFileIO.logger.setLevel(Level.SEVERE);
		ID3v23Frame.logger.setLevel(Level.SEVERE);
		ID3v23Tag.logger.setLevel(Level.SEVERE);

这些代码来避免jaudiotagger输出很多log信息。


总结:  找资料先找官网,我开始就是想找 jaudiotagger 的中文资料,结果没找到合适的内容,然后瞎找了一堆项目。


给懒人用的测试代码
	public static void  test1() throws Exception {
		File [] dirs = new File[] {
				new File("F:/myvoices"),
				new File("F:/music")
		};
		
		for(File dir : dirs) {
			File [] fs = dir.listFiles();
			for(File file : fs) {
				int length = Mp3Util.getMp3TrackLength(file);
				if(length <= 0) {
					System.err.println("###出错" + file.getName() + "=" + Mp3Util.getMp3TrackLength(file));	
				} else {
					System.out.println(file.getName() + "=" + Mp3Util.getMp3TrackLength(file));
				}
				
			}
		}
	}





  • jaudiotagger文档.zip (82.9 KB)
  • 描述: 官网下载的有用文档,避免访问不了参考用
  • 下载次数: 46
分享到:
评论

相关推荐

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

    本文将深入探讨如何使用Java解析这些信息,特别是获取MP3文件的时长,并将其格式化为“00:04:20”这样的形式。 首先,我们需要了解ID3标签的结构。ID3v2是当前最常用的版本,它包含多个帧,每个帧都有特定的标识符...

    JAVA获取音频时长jar包依赖.zip

    总的来说,这个压缩包提供了解决Java环境下获取.mp3和.wav格式音频文件时长的工具。通过JaudioTagger和jl1.0.1.jar,开发者可以方便地集成到自己的项目中,实现音频时长的快速获取。在开发过程中,需要注意版权问题...

    具有播放器的一般功能扫描内存的MP3文件并以列表显示点击进入播放可以快进后退顺序播放后台播放.rar

    2. **文件I/O**:读取MP3文件信息,如歌曲名、艺术家、时长等,可能需要使用特定的库,如ID3标签解析库(如`libid3tag`)来获取元数据。 3. **音频解码**:为了播放MP3文件,程序需要解码音频数据。这通常需要使用...

    得到MP3总时间的API和JAR包

    `jid3lib`是一个专门用于处理ID3标签的开源库,ID3是MP3文件中的一个标准元数据格式,用来存储歌曲的信息,如艺术家、专辑、标题、时长等。`jid3lib-0.5.4`是这个库的一个版本,它支持ID3v1和ID3v2两种版本的标签,...

    基于java开发的音乐播放器小程序

    这需要对音频处理有一定的理解,例如使用Java的AudioSystem类或者第三方库如JLayer或JMF(Java Media Framework)来加载、解码和播放音频文件。 3. **文件操作**:播放器需要能够读取和管理音乐文件,可能涉及文件I...

    基于Java和Python的爬虫项目实战源码.zip

    音乐:歌手名+歌曲名等元信息,以MP3文件大体分为三部分: a) TAG_V2(ID3V2) 包含了作者、作曲、专辑等信息,长度不固定,扩充ID3V1信息 b) Frame 一系列的帧,由帧头(MP3的位率、采样率、版本等信息)和数据实体...

    编程提取SWF中的声音文件.zip_swf_声音

    当我们需要从SWF文件中单独提取声音文件时,这就涉及到编程技术。本文将详细介绍如何通过编程来实现这一目标。 首先,我们需要理解SWF文件的结构。SWF文件是二进制文件,其中包含了各种数据块,如图形、动作脚本和...

    jaudiotagger-2.2.6-SNAPSHOT.zip

    jaudiotagger的核心功能之一是能够精确到微秒级别地获取音频的时长。这在需要对音频进行精确剪辑或分析的应用中极其重要。除此之外,它还能读取和展示音频的其他关键信息,如艺术家、专辑、曲目编号、年份、流派、...

    ABCMusicPlayer:ABC 音乐播放器。 最初用于 MIT 6.005 项目

    6. **元数据解析**:音乐文件通常包含元数据,如艺术家名、专辑名和歌曲时长等。ABC音乐播放器可能使用了Java的ID3Tag库来解析这些信息,以便在界面上展示。 7. **线程处理**:为了保证用户界面的流畅性,播放过程...

    Android开发之媒体播放工具类完整示例

    - `getDuration(String path)`: 此方法用于获取指定路径下的媒体文件时长。通过创建一个新的MediaPlayer实例来获取媒体时长,获取完毕后关闭该实例。 ```java public void play(FileInputStream inputStream) { ...

    新版Android开发教程.rar

    的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 • 应用程序框架 支持组件的重用与替换 • Dalvik Dalvik Dalvik Dalvik 虚拟机 专为移动设备优化 • ...

    HTML 5 标签参考

    - `ping`:发送PING请求时使用的URL列表。 - `rel`:定义与被链接文档的关系。 - `target`:定义在何处打开链接。 - `type`:定义链接文档的MIME类型。 - **示例**: ```html ...

Global site tag (gtag.js) - Google Analytics