您的位置:首页 > 数据库

直接读取MP3信息,专辑图片(非查系统数据库)

2012-12-07 15:40 621 查看
此代码采用了一个名为jaudiotagger的框架,该框架可以读取MP3、flac、asf、ogg、wav等音乐文件,还可以读取MP4文件信息。

我只做了一个读取MP3信息,如有兴趣可以到作者主页去瞧瞧:http://www.jthink.net/jaudiotagger/



只需一个Activity即可实现读取MP3信息:

main.xml:

<?xml
version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

<TextView

android:id="@+id/mp3_header"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:textColor="@android:color/white"

android:textSize="20dp" />

<TextView

android:id="@+id/mp3_content"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:textColor="@android:color/white"

android:textSize="20dp" />

<ImageView

android:id="@+id/mp3_img"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

/>

</LinearLayout>

JaudiotaggerActivity:

public
class JaudiotaggerActivity extends Activity {

private MP3File mp3File;

private TextView tvHeader, tvContent;

private ImageView ivImg;

private final String toFolder = "mnt/sdcard/jaudiotagger/",

mp3Name = "BeiJingBeiJing.mp3";

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

tvContent = (TextView) findViewById(R.id.mp3_content);

tvHeader = (TextView) findViewById(R.id.mp3_header);

ivImg= (ImageView) findViewById(R.id.mp3_img);

copy();

read();

}

public void read() {

getHead();

getContent();

}

/**

* 获得歌曲内容

*/

void getContent() {

try {

if (mp3File.hasID3v1Tag()) {

Tag tag = mp3File.getTag();

StringBuffer sbf = new StringBuffer();

sbf.append("歌手:"+tag.getFirst(FieldKey.ARTIST) + "\n");

sbf.append("专辑名:"+tag.getFirst(FieldKey.ALBUM) + "\n");

sbf.append("歌名:"+tag.getFirst(FieldKey.TITLE) + "\n");

sbf.append("年份:"+tag.getFirst(FieldKey.YEAR));

Artwork artwork=tag.getFirstArtwork(); //获得第一张专辑图片

byte[] byteArray=artwork.getBinaryData(); //将读取到的专辑图片转成二进制

Bitmap bitmap = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length); //通过BitmapFactory转成Bitmap

ivImg.setImageBitmap(bitmap);

tvContent.setText(sbf);

}

if (mp3File.hasID3v2Tag()) {

}

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 获得头部信息

*/

void getHead() {

try {

File file = new File(toFolder + mp3Name);

mp3File = (MP3File) AudioFileIO.read(file);

MP3AudioHeader header = mp3File.getMP3AudioHeader(); //mp3文件头部信息

StringBuffer sbf = new StringBuffer();

sbf.append("长度: " + header.getTrackLength() + "\n");

sbf.append("比特率: " + header.getBitRate() + "\n");

sbf.append("编码器: " + header.getEncoder()+"\n");

sbf.append("格式: " + header.getFormat() + "\n");

sbf.append("声道: " + header.getChannels() + "\n");

sbf.append("采样率: " +header.getSampleRate() + "\n");

sbf.append("MPEG: " + header.getMpegLayer() + "\n");

sbf.append("MP3起始字节: "+header.getMp3StartByte() + "\n");

sbf.append("精确的长度: "+header.getPreciseTrackLength() + "\n");

sbf.append("帧数:"+header.getNumberOfFrames()+ "\n");

sbf.append("编码类型:"+header.getEncodingType()+ "\n");

sbf.append("MPEG版本:"+header.getMpegVersion()+ "\n");

tvHeader.setText(sbf);

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 先复制一首歌到SD卡目录

*/

private void copy() {

File file = new File(toFolder);

if (!file.exists()) {

file.mkdirs();

}

InputStream inputStream;

FileOutputStream fos;

try {

inputStream = this.getAssets().open(mp3Name);

fos = new FileOutputStream(toFolder + mp3Name);

byte[] buffer = new byte[8192];

int count = 0;

while ((count = inputStream.read(buffer)) > 0) {

fos.write(buffer, 0, count);

}

fos.close();

inputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

OK,其实就是一个调用的过程,作者已经封装了,我只是拿来调用。

再给大家提供我写的代码,由于里面有一个5M的歌曲比较大,所以我给大家提供两个版本下载

没有歌曲的版本自己改下代码仍然可以运行,再给大家提供此框架的source,doc



没有歌曲的版本.rar

1.11 MB, 下载次数: 3, 下载积分: e币 -2 元

没有歌曲的版本.rar



有歌曲的版本.zip

6.37 MB, 下载次数: 23, 下载积分: e币 -2 元

有歌曲的版本.zip



jaudiotagger-2.0.4-20111207.115108-15-sources.zip

889.33 KB, 下载次数: 6, 下载积分: e币 -2 元

source



jaudiotagger-2.0.4-20111207.115108-15-javadoc.zip

前天 15:27 上传

点击文件名下载附件
下载积分: e币 -2 元

2.19 MB, 下载次数: 28, 下载积分: e币 -2 元

(源自:http://www.eoeandroid.com/thread-235425-1-1.html)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐