as3.0 解析mp3文件 得到mp3的作者,专辑等

参考的资料:

              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();
		}



	}


}

 

 

 

 

 

 

 

 

你可能感兴趣的:(解析mp3,mp3作者,mp3专辑,mp3文件名)