8.15.读取mp3文件的ID3数据

8.15.1. 问题
我需要从一个MP3 文件中读取ID3 数据。
8.15.2. 解决办法
使用Event.ID3 方法,当ID3 数据被分析时Sound 类将被迅速处理
8.15.3. 讨论
当把一个装载的MP3 文件的ID3 数据被分析时,Sound 类迅速处理一个事件。这些数据被作为一个ID3Info 对象保存,它定义的变量访问的所有属性被写入MP3 开头的字节中:
+展开
-ActionScript
private var sound:Sound;
public function _8_16()
{
sound = new Sound();
sound.addEventListener(Event.ID3, onID3InfoReceived);
sound.load(new URLRequest("../assets/1.mp3"));
}
private function onID3InfoReceived(event:Event):void
{
var id3:ID3Info = event.target.id3;
for (var propName:String in id3)
{
trace(propName + " = " + id3[propName]);
}
}

一首我听的歌中的信息,我写的这方似乎是这样的:
TCON = Alternative & Punk
TIT2 = The Pink Batman
TRCK = 2/9
TPE1 = Dan Deacon
TALB = Spiderman Of The Rings
TCOM = Dan Deacon

MP3 文件的ID3 信息是一个简单的按一定次序分组的字节,读取和返回字符串或整数。MP3是Flash Player 支持的唯一一种格式。RichApps (www.richapps.de)的开发者Benjamin Dobler,不管怎么样,已经为WAV 格式作了一些优秀的工作。得到WAV 文件在Flash Player中播放稍微困难一些。如果你有兴趣,可以到Benjamin 的网站去看看。如果你需要从WAV文件中分析数据,看起来像这样:
+展开
-ActionScript
public var bytes:ByteArray;
public var chunkId:String;
public var chunkSize:int;
public var chunkFormat:String;
public var subchunk1Id:String;
public var subchunk1Size;
public var audioFormat;
public var channels;
public var sampleRate;
public var bytesPersecond;
public var blockAlign;
public var bitsPerSample;
public var dataChunkSignature:String;
public var dataChunkLength;
public function read(bytes:ByteArray):void{
this.bytes = bytes;
// Read Header
bytes.endian = "littleEndian";
chunkId = bytes.readMultiByte(4,"utf"); //RIFF
chunkSize = bytes.readUnsignedInt();
chunkFormat = bytes.readMultiByte(4,"utf"); //WAVE
subchunk1Id = bytes.readMultiByte(4,"iso-8859-1"); // 12Header Signature
subchunk1Size = bytes.readInt(); // 16 4 <fmt length>
audioFormat = bytes.readShort(); // 20 2 <format tag> sample
channels = bytes.readShort(); // 22 2 <channels> 1 = mono,2 = stereo
sampleRate = bytes.readUnsignedInt();// 24 4 <sample rate>
bytesPersecond = bytes.readUnsignedInt(); //28 4<bytes/second> Sample-Rate * Block-Align
blockAlign = bytes.readShort(); // 32 2 <block align> channel * bits/sample / 8
bitsPerSample = bytes.readUnsignedShort(); //34 2<bits/sample> 8, 16 or 24
dataChunkSignature = bytes.readMultiByte(4,"iso-8859-1");
//RIFF
dataChunkLength = bytes.readInt();
}

如果你需要从AU 文件读取头信息,那看起来像这样:
+展开
-ActionScript
public var bytes:ByteArray;
public var magicId;
public var header;
public var datasize;
public var channels;
public var comment;
public var sampleRate;
public var encodingInfo;
public function read(bytes:ByteArray):void{
this.bytes = bytes;
// Read Header
bytes.endian = "bigEndian";
magicId = bytes.readUnsignedInt();
header = bytes.readInt();
datasize = bytes.readUnsignedInt();
encodingInfo = bytes.readUnsignedInt();
sampleRate = bytes.readUnsignedInt();
channels = bytes.readInt();
comment = bytes.readMultiByte(uint(header)-24, "utf");
}

MP3 可能是读取数据最简单的格式,但是他们无疑不是我们能读取得唯一格式。

加支付宝好友偷能量挖...


评论(0)网络
阅读(146)喜欢(0)flash/flex/fcs/AIR