`
yexin218
  • 浏览: 958264 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

用JAVA读取MP3文件的标签信息

    博客分类:
  • Java
阅读更多
  突然看到网上有人在用JavaScript来读取MP3中ID3信息。详细请看!
  我也在网上搜索了用Flex写的实现同样的功能的。详细请看!
  但是我比较熟悉Java.所以也在网上搜索到了用Java实现的读取MP3文件标签信息。代码如下:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;

public class ReadMp3 {
private SongInfo info = null;
private RandomAccessFile ran = null;
private File file = null;

public ReadMp3() throws FileNotFoundException {
file = new File("simcoder.mp3");
ran = new RandomAccessFile(file, "r");
System.out.println("文件裝載完畢");

}

public static void main(String[] args) throws IOException {
ReadMp3 read = new ReadMp3();
byte[] buffer = new byte[128];

read.ran.seek(read.ran.length() - 128);

read.ran.read(buffer);
SongInfo info = new SongInfo(buffer);
System.out.println("name:" + info.getSongName() + " year:"
+ info.getYear() + " 歌手:" + info.getArtist() + " 專輯名:"
+ info.getAlbum() + " 備注:" + info.getComment());

}
}

 
public class SongInfo {

private final String TAG = "TAG"; // 文件头1-3

private String songName; // 歌曲名4-33

private String artist; // 歌手名34-63

private String album; // 专辑名61-93

private String year; // 年94-97

private String comment; // 备注98-125

private byte r1, r2, r3; // 三个保留位126,127,128

private boolean valid; // 是否合法

public transient String fileName; // 此歌曲对应的文件名,没有封装


public SongInfo(byte[] data) {
if (data.length != 128) {
throw new RuntimeException("数据长度不合法:" + data.length);
}
String tag = new String(data, 0, 3);
// 只有前三个字节是TAG才处理后面的字节

if (tag.equalsIgnoreCase("TAG")) {
valid = true;
songName = new String(data, 3, 30).trim();
artist = new String(data, 33, 30).trim();
album = new String(data, 63, 30).trim();
year = new String(data, 93, 4).trim();
comment = new String(data, 97, 28).trim();
r1 = data[125];
r2 = data[126];
r3 = data[127];
} else {
valid = false;
}
}

public SongInfo() {
}

/**
* 返回是否合法
*
* @return 是否
*/
public boolean isValid() {
return valid;
}

/**
* 得到此对象的128个字节的表示形式
*
* @return
*/
public byte[] getBytes() {
byte[] data = new byte[128];
System.arraycopy(TAG.getBytes(), 0, data, 0, 3);
byte[] temp = songName.getBytes();
System.arraycopy(temp, 0, data, 3, temp.length > 30 ? 30 : temp.length);
temp = artist.getBytes();
System
.arraycopy(temp, 0, data, 33, temp.length > 30 ? 30
: temp.length);
temp = album.getBytes();
System
.arraycopy(temp, 0, data, 63, temp.length > 30 ? 30
: temp.length);
temp = year.getBytes();
System.arraycopy(temp, 0, data, 93, temp.length > 4 ? 4 : temp.length);
temp = comment.getBytes();
System
.arraycopy(temp, 0, data, 97, temp.length > 28 ? 28
: temp.length);
data[125] = r1;
data[126] = r2;
data[127] = r3;
return data;
}

public String getArtist() {
return artist;
}

public void setArtist(String authorName) {
this.artist = authorName;
}

public String getComment() {
return comment;
}

public void setComment(String comment) {
this.comment = comment;
}

public byte getR1() {
return r1;
}

public void setR1(byte r1) {
this.r1 = r1;
}

public byte getR2() {
return r2;
}

public void setR2(byte r2) {
this.r2 = r2;
}

public byte getR3() {
return r3;
}

public void setR3(byte r3) {
this.r3 = r3;
}

public String getSongName() {
return songName;
}

public void setSongName(String songName) {
if (songName == null) {
throw new NullPointerException("歌名不能是null!");
}
valid = true;
this.songName = songName;
}

public String getAlbum() {
return album;
}

public void setAlbum(String specialName) {
this.album = specialName;
}

public String getYear() {
return year;
}

public void setYear(String year) {
this.year = year;
}

}
 

执行结果如下:

name:简单程序员 year:2008 歌手:编曲.后期:丙峰 專輯名:电话:011186 備注:QQ
:5104

 

 原文地址 http://xiangzi527.spaces.live.com/Blog/cns!D510D99107C879F4!123.entry
5
1
分享到:
评论
9 楼 mumuaimao2009 2013-05-21  
楼主坑爹啊,代码复制了跑出来全是null!敢不敢上传个附件
8 楼 Cross_Lee 2012-01-21  
有修改这些属性的源码吗?求教,谢谢。
7 楼 yexin218 2009-07-23  
zhouzhichu 写道
楼主,如何获取时长啊,能办到否?

你好,这个是得到视频的,参考下: http://jatula.iteye.com/blog/259328
6 楼 zhouzhichu 2009-07-22  
楼主,如何获取时长啊,能办到否?
5 楼 yexin218 2009-04-24  
kevincollins 写道

我有乱码耶

中文乱码?不是吧,没有碰到过,看看你文件本身信息里面是不是乱码的啊
4 楼 kevincollins 2009-04-24  
我有乱码耶
3 楼 yexin218 2009-04-07  
LinuxFans 写道

楼主能否详解说一下,给一种音频流媒体文件,如何求它对应的帧分解参数?

不好意思,我也不知道。我网上帮你看看
2 楼 LinuxFans 2009-04-07  
楼主能否详解说一下,给一种音频流媒体文件,如何求它对应的帧分解参数?
1 楼 jax 2008-11-17  
IDSv1版本的,不错,再接再厉,给个v2版的 

相关推荐

    mp3agic:一个用于读取mp3文件并读取操作ID3标签(ID3v1和ID3v2.2至ID3v2.4)的Java库

    一个用于读取mp3文件并读取/操作ID3标签(ID3v1和ID3v2.2至ID3v2.4)的Java库。 有关使用此库的示例应用程序,请参阅包括一组简单的命令行工具,这些工具可以执行以下任务:打印mp3和ID3详细信息,使用ID3标签中的...

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

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    提取MP3封面文件并循环显示2

    目录递归,MP3标签

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

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    mp3tagger:打开库以读取ID3标签

    开源库,用于从.mp3文件中读取ID3版本1和2标签 首先,不要忘记添加由mozilla创建的通用字符检测器库。 从“依赖项”文件夹中获取 您可以访问执行此操作的标签 Mp3TagsFactory factory = new Mp3TagsFactory(); ...

    YOYOPlayer1.1

    在linux下面,此选项将被禁用:( 三,标签方面 1,现在完全支持ID3v1,ID3v2,APEv2,Vorbis标签的读取和写入,并可设置标签的读取和写入的编码.以免在读取标签的时候出现乱码的情况.程序的默认设置编码是GBK,如果是...

    YOYOPlayer(与千千静听一样的Java播放器)

    支持10波段均衡器. 支持ID3v1/v2、APE和Vorbis标签的读取和写入,支持设置标签编码,支持以标签重命名文件。 支持同步歌词滚动显示和拖动定位播放,并且支持在线歌词搜索功能。 支持多播放列表,支持多种...

    声音采集源码java-transform-swf:用于读取和写入Flash文件的Java库。完全支持Flash10

    文件格式规范的每个数据结构和标签的类的集合。 这些类提供了一个完全面向对象的 API 来编码和解码 Flash (.swf) 文件。 转换 SWF 支持最新发布的版本 - Flash 10。 该库还包含提供更高级别接口的类,支持从外部文件...

    JMusicPlayerFX:JMusicPlayerFX是一个简单的开源音频播放器,主要使用Java和JavaFX库制作

    JMusicPlayerFX关于JMusicPlayerFX是一个简单的开源音频播放器...在Windows上将JNA实施到自定义窗口使用的库: :一个Java库,用于读取mp3文件和读取ID3标签。 :一个Java库,提供比Java运行时提供的更好的图像缩放选项

    YOYOPlayer1.1.3

    支持ID3v1/v2、APE和Vorbis标签的读取和写入,支持设置标签编码,支持以标签重命名文件。 支持同步歌词滚动显示和拖动定位播放,并且支持在线歌词搜索功能。 支持多播放列表,支持多种视觉效果. 真正永久免费并且...

    Java mp3info-开源

    这是一组类,能够从MP3文件中读取ID3 V1和V2标签并进行写入

    yoyoplayer源码+程序

    YOYOPlayer是一个用JAVA编写的,跨平台的音乐播放软件.是一个集播放,歌词显示于一体的音频播放软件. YOYOPlayer的主要定位是Linux下的用户,因为Linux下几乎没有一款集成性高的音频播放软件,并且读取中文标签经常会...

    jaudiotagger-2.2.5.jar多媒体开发包

    支持读取和写入mp4,m4a和m4p(受保护)文件,包括多个图像和反向dns字段 完全支持Dsf,Aif和Wav格式的ID3标签 还支持旧式Wav Info标记 支持多页Ogg Vorbis评论 支持MP3 ID3v1,ID3v11,ID3v2.2,v2.3和v2.4是透明的...

    Flash 反编译工具(JPEXS Free Flash Decompiler) v3.0 中文版.zip

    - 每个标签显示的字符标识,并从ExportAsset或其他信息采取可选名称 两个面板editation - 在左边的面板中, editation右侧原来的预览 拖放SWF文件到主窗口打开文件 窗口出口项目外拖动树项目 预览项目的改变...

    jaudiotagger -2.2.6

    Jaudiotagger不是唯一可用的Java标记库,但在评估要使用的库时,您可能会考虑一些关键的好处 为所有完全支持的格式提供最流行的50个字段的通用接口 支持读取和写入mp4,m4a和m4p(受保护)文件,包括多个图像和反向...

    网管教程 从入门到精通软件篇.txt

    /r 找到坏扇区并恢复可读取的信息。隐含着 /p 参数。  注意 Chkdsk 命令需要 Autochk.exe 文件。如果不能在启动目录(默认为 %systemroot%System32)中找到该文件,将试着在 Windows 安装 CD 中找到它。如果有多...

    自动生成表白网页源码

    给页面文字添加span标签,设置id="text-xx"唯一属性,使用contenteditable="true",开启该元素的编辑模式,用jQuery属性.click()判断点击,用.text()返回此元素的文本内容,并用正则进行判断内容是否合法,然后通过...

    凌云论坛 ver 2.8.Server

    添加了media支持,目前可以支持mp3/avi/asf/rm/qt等大量的media文件; 10.调控了jbb的标签,目前我们论坛的jbb的标签可以更好的工作; 11.修复了一个jbb的漏洞,防止jbb标签直接读取本机硬盘上的资源! 12.完善了...

    OPhone应用开发权威指南(黄晓庆)

    7.4 MP3文件格式分析 306 7.4.1 MP3文件介绍 307 7.4.2 ID3V1标签 307 7.4.3 ID3V2标签 310 7.4.4 MP3帧结构 316 7.4.5 分割MP3文件 323 7.5 案例分析——铃声DIY 327 7.6 小结 329 第8章 让程序在后台运行 330 8.1 ...

Global site tag (gtag.js) - Google Analytics