一个NB的音乐插件,挺方便的,如果能把歌词也显示出来那就更好了。Examda提示:怎么办呢,在显示歌词之前,必须要知道目前正在播放的MP3是什么内容啊,一点可以从文件名得到一些信息,还有一点就是从MP3文件里面得到这个MP3的信息,我这里实现的ID3V1的格式标签,APEV2也想实现,无奈找不到相关的资料,不知道APEV2的数据结构是怎么样的,所以也无从分析。已经写完了ID3V1格式标签的读取和写入。并且NB的音乐插件也实现了本地歌词的搜索,先把ID3V1的文件结构的类文件帖一下。
MP3的ID3V1的信息结构是很有规律的,它一般是出现在MP3文件的最后128个字节上,并且是以“TAG”开头。这里把它封装成一个类了。
代码如下:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.hadeslee.music;
/**
* 一个歌曲信息的类的结构表示
* 这个歌曲是使用ID3V1的信息存储结构的
* @author hadeslee
*/
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;
}
}
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >>
责任编辑:小草