`
yexin218
  • 浏览: 973257 次
  • 性别: 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版的 

相关推荐

    java获取MP3详细信息

    在测试过程中,你可以创建一个名为`Test`的Java类,模拟上述步骤,读取并打印出一个MP3文件的详细信息。这样,你就可以验证jaudiotagger库是否正确安装和配置,并能有效地从MP3文件中提取元数据。记住,处理音频文件...

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

    在Java编程环境中,获取MP3文件的播放时长和Tag信息是常见的需求,尤其是在处理音频媒体库或音乐播放器应用时。本篇文章将详细介绍如何利用Java实现这一功能,主要涉及的技术点包括Java I/O流、音频处理库以及元数据...

    Java使用jaudiotagger批量修改MP3、FLAC标签tag标题信息

    Java使用jaudiotagger批量修改MP3、FLAC标签tag标题信息; 可跳转至https://blog.csdn.net/qq1170993239/article/details/130726976详细介绍

    Mp3文件采样率,码率转换.rar

    以下是一个简单的示例,展示如何在Java中使用第三方库进行MP3文件处理: ```xml <groupId>com.sun.media</groupId> <artifactId>jave <version>2.0 <scope>system ${project.basedir}/lib/jave.jar ``` ...

    MP3文件格式分析资料及帧解析源代码(java)

    MP3文件可能还包括ID3标签,用于存储元信息,如歌曲标题、艺术家、专辑等。 MP3文件的解析过程通常分为以下步骤: 1. **文件读取**:首先,程序需要打开MP3文件,并读取其内容。 2. **帧定位**:由于MP3文件的帧头...

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

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

    mp3 jar包给用户提供读取mp3文件的jar包

    2. **获取音频信息**:可以获取MP3文件的元数据,如艺术家、专辑、曲目标题、时长等ID3标签信息。 3. **音频处理**:例如,调整音量、裁剪片段、合并多个MP3文件等。 4. **转换格式**:虽然这通常不是MP3库的直接...

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

    接着,MP3标签(ID3标签)是存储在MP3文件中的元数据,用于提供歌曲信息,如艺术家、专辑、曲目标题和封面图片等。ID3标签分为多个版本,最常见的是ID3v1和ID3v2。提取MP3封面通常涉及到读取ID3v2标签,因为它支持...

    Java编程实现获取mp3时长及播放mp3文件的方法

    1. 使用`AudioFileIO.read()`方法读取MP3文件,将其转换为`MP3File`对象。 2. 调用`getAudioHeader()`方法从`MP3File`对象获取`MP3AudioHeader`,它包含了音频文件的头部信息。 3. 通过`MP3AudioHeader`的`...

    Java实现MP3播放器.zip

    这通常需要第三方库,如JAudioTagger,它可以读取MP3文件的ID3标签信息。 6. 文件管理:为了支持多首MP3的播放,需要实现文件管理功能,如播放列表、搜索和排序。这涉及到文件操作,可以使用Java的File类和...

    java获取MP3详细信息1

    2. 读取ID3标签:导入必要的库,并编写代码读取MP3文件的ID3信息。 ```java import org.jaudiotagger.audio.AudioFile; import org.jaudiotagger.audio.AudioFileIO; import org.jaudiotagger.tag.Tag; public ...

    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文件信息摘要源码.rar

    对于MP3文件信息摘要,我们需要使用文件操作命令来读取MP3文件,再用字符串处理命令解析ID3标签内容。 4. 文件操作: 在易语言中,可以使用“打开文件”命令打开MP3文件,然后使用“读文件”命令读取文件内容。...

    java获取mp3信息

    接下来,你可以编写一个简单的Java类来读取MP3文件的ID3标签信息: ```java import org.jaudiotagger.audio.AudioFile; import org.jaudiotagger.audio.AudioFileFormat; import org.jaudiotagger.audio.exceptions...

    mp3文件批量更名软件

    1. 文件I/O操作:软件需要读取MP3文件的元数据,如ID3标签,这包含了歌曲的艺术家、专辑、标题等信息。这些信息可以作为新文件名的基础。Java的`java.io`和`java.nio`包提供了读写文件的API。 2. ID3处理:ID3标签...

    java_mp3-0.3-src.zip_java mp3_java_mp3_mp3 java_mp3压缩

    "java_mp3"、"java_mp3"和"mp3_java"标签进一步强调了它是用Java语言来处理MP3文件的。"mp3压缩"可能指的是项目包含了对MP3文件的压缩或处理方法。 描述中提到“一个mp3压缩播放的Java源代码程序,非常好的”,这...

    简单MP3播放Java程序

    在这个项目中,开发者利用Java的IO流处理和多线程技术来读取和播放MP3文件。 2. **音频处理**: - **Java Sound API**:Java提供了Java Sound API来处理音频。通过AudioInputStream类,可以读取音频文件,然后使用...

    java_mp3_src.zip_WaveFormat_mp3 java_mp3 java

    WaveFormat是音频编码的一部分,而"mp3_java"标签表明项目中可能包含了Java对MP3文件的读取和处理机制。 【压缩包子文件的文件列表】揭示了项目的构建和运行环境: 1. `build-win32.bat` 和 `build-unix.sh` 是...

    java解释mp3的id3信息

    在音乐领域,MP3是一种广泛使用的音频压缩格式,而ID3是MP3文件中的元数据标准,用于存储歌曲的相关信息,如艺术家、专辑、歌曲名等。本文将深入探讨Java如何解析MP3文件中的ID3信息,特别是ID3v1和ID3v2.3版本。 ...

    JAVA对音频文件处理程序

    总结来说,这个项目展示了如何使用Java的音频API处理音频文件,包括读取、处理和保存,这对于理解和实现音频处理功能具有重要的学习价值。对于Java开发者来说,掌握这些技能有助于开发更丰富的多媒体应用程序。

Global site tag (gtag.js) - Google Analytics