前言:
最近在做实训,写一个音乐播放器,将文件存储在服务端,然后将相应的数据信息添加到数据库中。不想一个个手动添加,所以在百度之后发现MP3文件本身是只带这些信息的。
更新因为目前mp3文件中ID3v1的信息较少导致下述代码不能正常获取相关信息.
我对下述代码进行了改进. 具体项目代码地址
主要变动.
1. 使用由获取ID3v1中的信息变成了获取,ID3v2中的信息.
2. 去除了字符串过滤.
class MusicUtil {
private static final String SONG_NAME_KEY = "TIT2";
private static final String ARTIST_KEY = "TPE1";
private static final String ALBUM_KEY = "TALB";
/**
* 通过歌曲文件地址, 获取歌曲信息
*
* @param filePath 歌曲文件地址
* @return 歌曲信息
* @throws Exception 可能抛出空指针异常
*/
static Music getMusicInfo(String filePath) throws Exception {
Music music = null;
try {
MP3File mp3File = (MP3File) AudioFileIO.read(new File(filePath));
MP3AudioHeader audioHeader = (MP3AudioHeader) mp3File.getAudioHeader();
// 歌曲名称
String songName = getInfoFromFrameMap(mp3File, SONG_NAME_KEY);
// 歌手名称
String artist = getInfoFromFrameMap(mp3File, ARTIST_KEY);
// 歌曲专辑
String album = getInfoFromFrameMap(mp3File, ALBUM_KEY);
// 播放时长
int duration = audioHeader.getTrackLength();
// 封装到music对象
music = new Music(songName, artist, album, duration, filePath);
} catch (Exception e) {
e.printStackTrace();
System.out.println("文件读取失败!" + e);
}
return music;
}
/**
* 通过键值,获