Java读取MP3文件的二进制数据内附带的信息

本文介绍了一个简单的Java类,用于从MP3文件中读取内嵌的元数据信息,如歌曲名称、艺术家、专辑等,并提供了完整的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天,简单地封装了一个用于读于MP3文件内附信息的一个类,代码如下,仅学习使用

--------------------------------------------------------------------------------------------------------------------------------

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;


public class Mp3Info {

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

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

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

private String album; // 专辑名64-93 30

private String year; // 年 94-97 4

private String comment; // 备注98-125 28

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

private boolean valid; // 是否Mp3文件

public String fileName; //歌曲对应的文件名

public byte[] mp3Data;



public Mp3Info(String file) {
//装载文件
RandomAccessFile raf = null;
try {
raf = new RandomAccessFile(new File(file),"r");
//定位随机访问文件对象读取数据指针的位置,定位到MP3文件最后倒数第128字节的地方
raf.seek(raf.length()-128);
//定义一个字节数组,长度为128,用于保存MP3信息数据
mp3Data = new byte[128];
//将信息读到mp3Data里边
raf.read(mp3Data);
//读出128个字节的前三个字节,判断是否是MP3文件
String Tag = new String(mp3Data,0,3);
if(Tag.equalsIgnoreCase("TAG")){
//是MP3文件
valid = true;
//对MP3信息对象的各个字段进行置值
songName = new String(mp3Data,3,30);
artist = new String(mp3Data,33,30);
album = new String(mp3Data,63,30);
year = new String(mp3Data,93,4);
comment = new String(mp3Data,97,28);
//三个字节的保留位
r1 = mp3Data[125];
r2 = mp3Data[126];
r3 = mp3Data[127];
}else{
throw new IsNotMp3FileException();
}

} catch (FileNotFoundException e) {

e.printStackTrace();
} catch (IOException e) {

e.printStackTrace();
} catch (IsNotMp3FileException e) {

e.printStackTrace();
}

}

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

}

public String getSongName() {
return songName;
}
public void setSongName(String songName) {
this.songName = songName;
}
public String getArtist() {
return artist;
}
public void setArtist(String artist) {
this.artist = artist;
}
public String getAlbum() {
return album;
}
public void setAlbum(String album) {
this.album = album;
}
public String getYear() {
return year;
}
public void setYear(String year) {
this.year = year;
}
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 boolean isValid() {
return valid;
}
public void setValid(boolean valid) {
this.valid = valid;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public String getTAG() {
return TAG;
}

public byte[] getMp3Data() {
return mp3Data;
}

public void setMp3Data(byte[] mp3Data) {
this.mp3Data = mp3Data;
}

}
--------------------------------------------------------------------------------------------------------------------------------

public class IsNotMp3FileException extends Exception {

/**
* 非法mp3异常类
*/
private static final long serialVersionUID = 1L;
public IsNotMp3FileException(){

System.out.println("非MP3文件异常!请传入正常的MP3格式的文件!");
}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值