直接读取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();
}
}
}
没有歌曲的版本.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信息,如有兴趣可以到作者主页去瞧瞧: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)
相关文章推荐
- Android 调用系统相机拍照(适配7.0)、从图库选择图片、从数据库读取联系人信息、相册图片、扫描文件
- mp3 音频 音乐 tag ID3 ID3V1 ID3V2 标签 读取信息 获得图片 jpeg bmp 图片转换等
- 上传图片至服务器,写入到数据库Blob字段中,以及从数据库读取Blob信息(iframe父子页面传值)(1)
- 获取MP3和M4A音乐文件的歌曲信息以及专辑图片
- 上传图片至服务器,写入到数据库Blob字段中,以及从数据库读取Blob信息(iframe父子页面传值)(2)
- php直接读取数据库信息
- c# 如何将图片信息从数据库中读取出来放入pictureBox1中:
- android 向数据库写入图片信息 读取图片信息
- 读取MP3专辑图片
- 保存图片信息到数据库,并可读取后显示在前端
- mp3 音频 音乐 tag ID3 ID3V1 ID3V2 标签 读取信息 获得图片 jpeg bmp 图片转换
- 读取数据库中数据,在页面上直接显示图片(点击该图片变大)
- 用python给MP3加封面图片,修改作者,专辑等信息
- (一)上传图片至服务器,写入到数据库Blob字段中,以及从数据库读取Blob信息(iframe父子页面传值)
- mp3 音频 音乐 tag ID3 ID3V1 ID3V2 标签 读取信息 获得图片 jpeg bmp 图片转换(下)
- 从MP3中读取专辑图片
- 读取MP3文件内的ID3V2专辑图片并显示
- 用C#编程从数据库中读取图片数据导进Excel文件的方法(如何从数据库中读取保存的文件,直接打开,中间不保存到本地)
- (二)上传图片至服务器,写入到数据库Blob字段中,以及从数据库读取Blob信息(iframe父子页面传值)
- 【ASP.NET 进阶】获取MP3文件信息并显示专辑图片