怎样用java提取MP3的IDv2里专辑图片信息

问题描述

如题。谢谢!那位提供点关于关于专辑图片在mp3里存储的形式也好

解决方案

解决方案二:
用JAVA读取MP3文件的标签信息packagemp3;importjava.io.File;importjava.io.FileNotFoundException;importjava.io.IOException;importjava.io.RandomAccessFile;publicclassReadMp3{privateSongInfoinfo=null;privateRandomAccessFileran=null;privateFilefile=null;publicReadMp3()throwsFileNotFoundException{file=newFile("./rec/感觉不到你.mp3");ran=newRandomAccessFile(file,"r");System.out.println("文件裝載完畢");}publicstaticvoidmain(String[]args)throwsIOException{ReadMp3read=newReadMp3();byte[]buffer=newbyte[128];read.ran.seek(read.ran.length()-128);read.ran.read(buffer);SongInfoinfo=newSongInfo(buffer);System.out.println("name:"+info.getSongName()+"year:"+info.getYear()+"歌手:"+info.getArtist()+"專輯名:"+info.getAlbum()+"備注:"+info.getComment());}}packagemp3;/***一个歌曲信息的类的结构表示这个歌曲是使用ID3V1的信息存储结构的**@authorhadeslee*/publicclassSongInfo{privatefinalStringTAG="TAG";//文件头1-3privateStringsongName;//歌曲名4-33privateStringartist;//歌手名34-63privateStringalbum;//专辑名61-93privateStringyear;//年94-97privateStringcomment;//备注98-125privatebyter1,r2,r3;//三个保留位126,127,128privatebooleanvalid;//是否合法publictransientStringfileName;//此歌曲对应的文件名,没有封装publicSongInfo(byte[]data){if(data.length!=128){thrownewRuntimeException("数据长度不合法:"+data.length);}Stringtag=newString(data,0,3);//只有前三个字节是TAG才处理后面的字节if(tag.equalsIgnoreCase("TAG")){valid=true;songName=newString(data,3,30).trim();artist=newString(data,33,30).trim();album=newString(data,63,30).trim();year=newString(data,93,4).trim();comment=newString(data,97,28).trim();r1=data[125];r2=data[126];r3=data[127];}else{valid=false;}}publicSongInfo(){}/***返回是否合法**@return是否*/publicbooleanisValid(){returnvalid;}/***得到此对象的128个字节的表示形式**@return*/publicbyte[]getBytes(){byte[]data=newbyte[128];System.arraycopy(TAG.getBytes(),0,data,0,3);byte[]temp=songName.getBytes();System.arraycopy(temp,0,data,3,temp.length>30?30:temp.length);temp=artist.getBytes();System.arraycopy(temp,0,data,33,temp.length>30?30:temp.length);temp=album.getBytes();System.arraycopy(temp,0,data,63,temp.length>30?30:temp.length);temp=year.getBytes();System.arraycopy(temp,0,data,93,temp.length>4?4:temp.length);temp=comment.getBytes();System.arraycopy(temp,0,data,97,temp.length>28?28:temp.length);data[125]=r1;data[126]=r2;data[127]=r3;returndata;}publicStringgetArtist(){returnartist;}publicvoidsetArtist(StringauthorName){this.artist=authorName;}publicStringgetComment(){returncomment;}publicvoidsetComment(Stringcomment){this.comment=comment;}publicbytegetR1(){returnr1;}publicvoidsetR1(byter1){this.r1=r1;}publicbytegetR2(){returnr2;}publicvoidsetR2(byter2){this.r2=r2;}publicbytegetR3(){returnr3;}publicvoidsetR3(byter3){this.r3=r3;}publicStringgetSongName(){returnsongName;}publicvoidsetSongName(StringsongName){if(songName==null){thrownewNullPointerException("歌名不能是null!");}valid=true;this.songName=songName;}publicStringgetAlbum(){returnalbum;}publicvoidsetAlbum(StringspecialName){this.album=specialName;}publicStringgetYear(){returnyear;}publicvoidsetYear(Stringyear){this.year=year;}}

时间: 2024-09-11 22:41:01

怎样用java提取MP3的IDv2里专辑图片信息的相关文章

如何在网络视频中提取MP3

  工具/原料 1.先下载土豆视频下载工具:iTudou; 2.或者用FLVXZ网址提取.下载FLV和某flv转mp3 3.北京爱情故事主题曲 步骤/方法 1.打开视频网站,搜索"北京爱情故事",设法将视频以FLV形式储存到本地. 方法一:用视频网站提供的下载工具,比如土豆网提供的某版本itudou(版本可能更新). 方法二:用flvxz提取flv文件地址,然后用另存的办法储存到本地. 2.将保存到本地的flv格式文件通过转换工具提取MP3文件. 主要简单介绍用"月亮flv转

java 如何在一个普通类里创建session

问题描述 java 如何在一个普通类里创建session 如果不能的话,有其他方法能实现session的功能么 ,只做存取数据用 解决方案 从session的本质来看,就是一个全局的数据缓存对象,它底层实现就是Map的.所以如果你想实现一个全局的数据缓存功能,只要定义一个全局的HashMap或者HashTable对象就可以了.

java提取字符串的正则表达式

问题描述 java提取字符串的正则表达式 数据格式:{""collectTime"":""2015-11-11 10:08:27""dateTime"":""1447207707612hostName"":""SW-ADMIN-S5750-A0102""instanceId"":""260

java树的节点事件里调用repaint方法 不能实现重绘

问题描述 java树的节点事件里调用repaint方法 不能实现重绘 java树的节点事件里调用repaint方法 不能实现重绘 怎么解决......................... 解决方案 http://zhidao.baidu.com/link?url=_s3y58ND8LIk-TtWOqBE2sXSaX5vKISRuxgRbdlCvZ2TPcjjujnp85-84Xto3Pa3rh7GEZ8yJ5ctIOYQxF7wTq

进制转换-java怎么把一个数组里面的16进制值转换成8进制,我想先把16进制转成2进制再转8进制

问题描述 java怎么把一个数组里面的16进制值转换成8进制,我想先把16进制转成2进制再转8进制 java怎么把一个数组里面的16进制值转换成8进制,我想先把16进制转成2进制再转8进制,但是老是运行出错.大神们能不能给个小例子解释一下,谢谢 解决方案 http://blog.csdn.net/vanezuo/article/details/6556768 解决方案二: 使用函数啊,你找一下,Java有相应的函数能做到 解决方案三: 如果你的程序出错,你贴出你的程序才知道. 也可以参考我给你的

java 新手问题 为什么c里总是0

问题描述 java 新手问题 为什么c里总是0 package com.cyx.ex; import java.util.Scanner; public class Appea { /** * @param args */ public static void main(String[] args) { System.out.println("请输入一个16位长整形数:"); Scanner a = new Scanner(System.in); int i = 0; double d

java 提取指定网页中的所有汉字

问题描述 java 提取指定网页中的所有汉字 读取这个网页中汉字 http://news.sina.com.cn/c/2015-03-24/103831638858.shtml?qq-pf-to=pcqq.c2c 有大神也个例子么 解决方案 要求要用到正则表达式 解决方案二: 如果你这个请求是固定的格式,你可以选择截取URL

java中监听接口里面的onclick方法为什么被称为回调方法

问题描述 java中监听接口里面的onclick方法为什么被称为回调方法 那普通接口有回调方法吗,普通类有回调方法吗, 回调方法是如何定义的 解决方案 你别被回调这个词搞蒙了,其实就是把方法当做参数而已 解决方案二: 因为onclick你定义了,不是自己调用,而是间接由按钮点击后系统类库去调用,所以叫回调. 英文叫做callback. 解决方案三: 回调方法简单的说就是a方法都用b方法,b方法执行过程中需要调用a方法,callback 解决方案四: [个人向]Android回调接口的实现方法ja

编程-java中在类定义里能实例化本类的对象吗?

问题描述 java中在类定义里能实例化本类的对象吗? 我在一本书上看到这个,这里的内容试讲java的构造方法私有化的 class Singleton { Singleton instance=new Singleton(); private Singleton() {} public void print() { System.out.println("Hello World"); } } 这个我想请教一下,为什么这里能在类定义里实例化本类的对象? 这里还列出了另一种方式: class