java mp3 头信息_java读取mp3文件头信息

本文介绍了如何使用Java的jaudiotagger库读取MP3文件的ID3v2标签,包括歌曲名、歌手、专辑和时长等信息,并提供了一个名为`Mp3Info`的实体类来存储这些信息。代码示例展示了如何从MP3文件中提取和转换数据。
摘要由CSDN通过智能技术生成

标签:

最近在做一个项目的实训,有关于音乐播放的,需要取到一些音乐信息,比如播放时长,演唱歌手,歌曲名称等等信息添加到数据库中。而MP3文件本身就是带有这些信息的

而后在了解到mp3文件有2种标签 ,ID3V1和ID3V2,mp3标签是位于一个 MP3 文件的开头或末尾的若干字节内的数据格式,附加了关于该 MP3 的歌曲名、演唱者、专辑名、标题、年代、歌曲风格、类型、备注等信息.(相当于注释)

id3v2是保存在mp3文件开头;id3v1是保存在mp3文件结尾;id3v2&id3v1是同时保存,优先存 id3v2。

现在常见的应该是ID3V2标签的。

所以百度过后,发现了一个jar包可以读取到mp3文件信息。

那么我们这里用到的jar包 是

org

jaudiotagger

2.0.3

实现代码:

我们取信息,需要存储到一个实体类里面,那么我们创建一个Mp3Info类。

/**

* 类的功能描述

*

* @author admin

* @date 2018/12/22 17:36

*/

public class Mp3Info {

//音乐名

private String songName;

//歌手名

private String singerName;

//专辑名

private String album;

//时长

private Time duration;

public String getSongName() {

return songName;

}

public void setSongName(String songName) {

this.songName = songName;

}

public String getSingerName() {

return singerName;

}

public void setSingerName(String singerName) {

this.singerName = singerName;

}

public String getAlbum() {

return album;

}

public void setAlbum(String album) {

this.album = album;

}

public Time getDuration() {

return duration;

}

public void setDuration(Time duration) {

this.duration = duration;

}

public Mp3Info() {

}

public Mp3Info(String songName, String singerName, String album, Time duration) {

this.songName = songName;

this.singerName = singerName;

this.album = album;

this.duration = duration;

}

@Override

public String toString() {

return "Mp3Info{" +

"songName='" + songName + '\'' +

", singerName='" + singerName + '\'' +

", album='" + album + '\'' +

", duration=" + duration +

'}';

}

}

我这里为了调用简单,直接将我们的取信息的方法放入了Mp3Info类里面

/**

* @param filePath

* @Description: 传入MP3文件地址,读取mp3文件信息

* @Return: com.t.test.TestAll

* @Auther: admin

* @Date 2018/12/30 17:34

*/

public Mp3Info getSongInfo(String filePath) {

Mp3Info mp3Info = null;

try {

// 读取文件信息

MP3File mp3File = (MP3File) AudioFileIO.read(new File(filePath));

// 获取头

MP3AudioHeader audioHeader = (MP3AudioHeader) mp3File.getAudioHeader();

//歌名

ID3v23Frame songnameFrame = (ID3v23Frame) mp3File.getID3v2Tag().frameMap.get("TIT2");

String songName = songnameFrame.getContent();

//歌手

ID3v23Frame artistFrame = (ID3v23Frame) mp3File.getID3v2Tag().frameMap.get("TPE1");

String artist = artistFrame.getContent();

//专辑

ID3v23Frame albumFrame = (ID3v23Frame) mp3File.getID3v2Tag().frameMap.get("TALB");

String album = albumFrame.getContent();

//时长

int duration = audioHeader.getTrackLength();

mp3Info = new Mp3Info(songName, artist, album, secondToDate(duration));

} catch (Exception e) {

e.printStackTrace();

}

return mp3Info;

}

/**

* 秒转换为指定格式的日期

*

* @param second

* @return

*/

public static Time secondToDate(int second) {

//转换为毫秒,但需要减去最基础的8小时

Time time = new Time(second * 1000- 8 * 60 * 60 * 1000);

return time;

}

最后进行测试

public static void main(String[] args) {

Mp3Info songInfo = new Mp3Info().getSongInfo("C:\\Users\\13323\\Music\\薛之谦 - 天份.mp3");

System.out.println(songInfo);

}

d1e081d83bbe921ec801330b604f0b1f.png

注: 在百度java取MP3文件信息的时候,百度到很多的代码都不完全,要么就是乱码,其实现在很多mp3文件都是id3v2的,而那些代码都是通过id3v1去取得的,对自己造成了很大的麻烦。最后整合了下网上的代码,和自己的修改,才取到了这些信息。

标签:

来源: https://blog.csdn.net/qq_41890526/article/details/85397352

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值