参考的资料:
http://duyouhua1214.iteye.com/blog/1326238
mp3文件的首尾都存有文件的信息,存在尾部的称为ID3V1,在首部的称为 ID3V2。在这篇文章中只说存在尾部的id3v1
这里是一个表 ,记录了文件信息存放的位置:
ID3 V1.0
文件尾说明
字节
|
长度
(
字节
)
|
说
明
|
1-3
|
3
|
存放“
TAG
”字符,表示
ID3 V1.0
标准,紧接其后的是歌曲信息。
|
4-33
|
30
|
歌名
|
34-63
|
30
|
作者
|
64-93
|
30
|
专辑名
|
94-97
|
4
|
年份
|
98-127
|
30
|
附注
|
128
|
1
|
MP3
音乐类别,共
147
种。
|
按照这个就可以读取出mp3中文件的信息。
这里说的读取方法都是在操作的字节,所以只要理解原理,任何编程语言都能实现,这里就给出as3.0的代码:
package service { //import 省略 public class SongInfo { //private var TAG:String = "TAG";// 文件头1-3 private var songName:ByteArray = new ByteArray ;// 歌曲名4-33 private var artist:ByteArray = new ByteArray ;// 歌手名34-63 private var album:ByteArray = new ByteArray ;// 专辑名61-93 private var year:ByteArray = new ByteArray ;// 年94-97 private var comment:ByteArray = new ByteArray ;// 备注98-125 private var buffer:ByteArray = new ByteArray ; public function SongInfo(file:File) { //解决中文乱码的问题 System.useCodePage = true; var fileStream:FileStream = new FileStream ; fileStream.open(file,FileMode.READ); //设置文件读取的位置 fileStream.position = file.size - 128; fileStream.readBytes(buffer); // 只有前三个字节是TAG才处理后面的字节 ; var tag:ByteArray = new ByteArray ; buffer.readBytes(tag,0,3); if (tag.toString() == "TAG") { buffer.readBytes(songName,0,30); buffer.readBytes(artist,0,30); buffer.readBytes(album,0,30); buffer.readBytes(year,0,4); buffer.readBytes(comment,0,28); } fileStream.close(); } //返回备份 public function getComment():String { return comment.toString(); } //专辑名 public function getAlbum():String { return album.toString(); } //返回年月日 public function getYear():String { return year.toString(); } //返回歌曲的名字 public function getSongName():String { return songName.toString(); } //返回歌手 public function getSinger():String { return artist.toString(); } } }