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

此代码采用了一个名为jaudiotagger的框架,该框架可以读取MP3、flac、asf、ogg、wav等音乐文件,还可以读取MP4文件信息。

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

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

只需一个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)


你可能感兴趣的:(直接读取MP3信息,专辑图片(非查系统数据库))