参考的资料:
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();
}
}
}
本文详细解析了ID3V1.0 MP3文件尾部存储的歌曲信息,包括歌名、作者、专辑名、年份及备注,并提供了AS3.0代码实例用于读取这些信息。
1835

被折叠的 条评论
为什么被折叠?



