音乐id3信息解析

来源:互联网 发布:seo具体怎么做 编辑:程序博客网 时间:2024/04/27 13:43

最近在做音乐播放器id3信息解析代码如下:

public class ID3Info {

private static final String TAG = "ID3";
private Context mContext;
private String id3_album, id3_artist, id3_duration, id3_composer,
id3_genre, id3_title, id3_year, id3_date, id3_author, id3_bitRate;
private byte[] buff = null;
private String mPath = "";
private String mDefaultString = null;
private Bitmap artWork = null;
public boolean parseID3Info(String filePath) {
if (TextUtils.isEmpty(filePath)) {
return false;
}
MediaMetadataRetriever mediaMetadataRetriever = null;
String album = null;
String artist = null;
String composer = null;
String genre = null;
String title = null;
String release = null;
byte[] artworkData = null;


setID3Path(filePath);
try {
mediaMetadataRetriever = new MediaMetadataRetriever();
mediaMetadataRetriever.setDataSource(filePath);


title = mediaMetadataRetriever
.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
album = mediaMetadataRetriever
.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM);
artist = mediaMetadataRetriever
.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
artworkData = mediaMetadataRetriever.getEmbeddedPicture();
/*composer = mediaMetadataRetriever
.extractMetadata(MediaMetadataRetriever.METADATA_KEY_COMPOSER);
genre = mediaMetadataRetriever
.extractMetadata(MediaMetadataRetriever.METADATA_KEY_GENRE);
release = mediaMetadataRetriever
.extractMetadata(MediaMetadataRetriever.METADATA_KEY_YEAR);
setID3Date(mediaMetadataRetriever
.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DATE));
setID3BitRate(mediaMetadataRetriever
.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE));

setID3Composer(composer);
setID3Genre(genre);
setID3Year(release);*/
if(isISO8859(title)) {
title = new String(title.getBytes("ISO-8859-1"), "GBK");
}
setID3Title(title);

if(isISO8859(album)) {
album = new String(album.getBytes("ISO-8859-1"), "GBK");
}
setID3Album(album);

if(isISO8859(artist)) {
artist = new String(artist.getBytes("ISO-8859-1"), "GBK");
}
setID3Artist(artist);
if (artworkData != null) {
setID3Buff(artworkData);
}
return true;
} catch (UnsupportedOperationException e) {
e.printStackTrace();
return false;} 
catch (Exception e) {
e.printStackTrace();
return false;
} finally {
if (mediaMetadataRetriever != null) {
mediaMetadataRetriever.release();
mediaMetadataRetriever = null;
}
}
}
private boolean isISO8859(String str) {
if(TextUtils.isEmpty(str)){
return false;
}
try {
if(str.equals(new String(str.getBytes("ISO-8859-1"),"ISO-8859-1"))){
return true;
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return false;
}
return false;
}
public ID3Info(Context context) {
mContext = context;
mDefaultString = mContext.getString(R.string.media_unknown);
}
public void setID3ArtWork(Bitmap id3) {
artWork = id3;
}
public void setID3Album(String id3) {
id3_album = id3;
}
public void setID3Artist(String id3) {
id3_artist = id3;
}
public void setID3Duration(String id3) {
id3_duration = id3;
}
public void setID3Composer(String id3) {
id3_composer = id3;
}
public void setID3Genre(String id3) {
id3_genre = id3;
}
public void setID3Title(String id3) {
id3_title = id3;
}
public void setID3Year(String id3) {
id3_year = id3;
}
public void setID3Date(String id3) {
id3_date = id3;
}
public void setID3Author(String id3) {
id3_author = id3;
}
public void setID3BitRate(String id3) {
id3_bitRate = id3;
}
public void setID3Buff(byte[] data) {
buff = data;
}
public void setID3Path(String filePath) {
mPath = filePath;
}
public String getID3Path() {
return mPath;
}
public byte[] getID3Buff() {
return buff;
}
public String getID3Album() {
if (TextUtils.isEmpty(id3_album)) {
return mContext.getString(R.string.media_unknown);
} else {
return id3_album;
}
}
public String getID3Artist() {
if (TextUtils.isEmpty(id3_artist)) {
return mContext.getString(R.string.media_unknown);
} else {
return id3_artist;
}
}
public String getID3Duration() {
return id3_duration;
}
public String getID3Composer() {
String prefix = mContext.getString(R.string.media_unknown) + ":";
if (TextUtils.isEmpty(id3_composer)) {
return prefix + mDefaultString;
} else {
return prefix + id3_composer;
}
}
public String getID3Genre() {
if (TextUtils.isEmpty(id3_genre)) {
return mContext.getString(R.string.media_unknown);
} else {
return id3_genre;
}
}
public String getID3Title() {
if (TextUtils.isEmpty(id3_title)) {
return getFileName(mPath);
} else {
return id3_title;
}
}
public String getFileName(String path) {
try {
if (TextUtils.isEmpty(path)) {
return null;
}
String[] tmp = path.replace("\\\\", "/").split("/");
String name = tmp[tmp.length - 1];
name = name.substring(0, name.lastIndexOf("."));
return name;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public String getID3Year() {
String prefix = mContext.getString(R.string.media_unknown) + ":";
if (TextUtils.isEmpty(id3_year)) {
return prefix + mDefaultString;
} else {
return prefix + id3_year;
}
}
public String getID3Date() {
return id3_date;
}
public String getID3Author() {
return id3_author;
}
public String getID3BitRate() {
String prefix = mContext.getString(R.string.media_unknown) + ":";
if (TextUtils.isEmpty(id3_bitRate)) {
return prefix + mDefaultString;
} else {
try {
int bitRate = Integer.parseInt(id3_bitRate);
bitRate /= 1000;
return prefix + bitRate + "kbps";
} catch (NumberFormatException e) {
return prefix + mDefaultString;
}
}
}
public Bitmap getID3ArtWork(ImageView view) {
if (buff != null) {
byte[] data = getID3Buff();
Log.d(TAG, " data.length = " + data.length);
if (data != null && data.length > 0) {
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inJustDecodeBounds = true;
opts.inPreferredConfig = Bitmap.Config.RGB_565;
artWork = BitmapFactory.decodeByteArray(data, 0, data.length,
opts);
Log.d(TAG, "width " + opts.outWidth + " height "
+ opts.outHeight);
opts.inJustDecodeBounds = false;
LayoutParams lp = view.getLayoutParams();
Log.d(TAG, "view.width = " + lp.width + "; view.height = "
+ lp.height);
if (opts.outHeight <= lp.height && opts.outWidth <= lp.width) {
artWork = BitmapFactory.decodeByteArray(data, 0,
data.length, opts);
} else if (opts.outHeight > opts.outWidth) {
opts.inSampleSize = Math.round(opts.outHeight / lp.height);
artWork = BitmapFactory.decodeByteArray(data, 0,
data.length, opts);
} else {
opts.inSampleSize = Math.round(opts.outWidth / lp.width);
artWork = BitmapFactory.decodeByteArray(data, 0,
data.length, opts);
}
if (artWork == null)
Log.d(TAG, "artWork == null");
}
}
return artWork;
}
}
0 0
原创粉丝点击