用java获取mp3文件播放时长和tag信息
2012-05-21 09:35
561 查看
需要从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));
}
}
}
}
先是找到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));
}
}
}
}
相关文章推荐
- 用java获取mp3文件播放时长和tag信息
- java 获取MP3文件时长等信息
- java 获取MP3文件播放时长
- Python实例获取mp3文件的tag信息
- C#获取文件详细备注信息,MP3的Tag等等
- Java获取音频文件(MP3)的播放时长
- 实现php获取mp3文件元信息如播放时间歌曲作者等
- 编写Python脚本来获取mp3文件tag信息的教程
- 编写Python脚本来获取mp3文件tag信息的教程
- C# 获取 mp3文件信息(tag信息)
- java获取mp3的时长和播放mp3文件
- 用c++获取音频文件的信息 达到异步播放的效果(2)
- Android 播放mp3 tag乱码分析之java 篇
- 如何获取播放H264原始数据文件的宽高信息(from SPS PPS)
- C#实现获取mp3 Tag信息的方法
- 安卓(JAVA)读取Mp3文件中的歌曲信息(及readLine()出现乱码问题的解决方法)
- 获取MP3文件的播放时间
- Java获取MP3音乐文件时长
- C#获取mp3 Tag信息
- 通过java获取音频文件信息(专辑、歌手、歌名、)