我们现在想获取正在播放的MP3文件的一些相关信息,比如:艺术家、音乐集、风格, 等。
解决方案
读取sound对象的id3属性
具体讨论原创,转载说明出处 http://hi.baidu.com/flash_as3
MP3文件中可以包含很多关于声音文件的一些数据,这些数据通常包含艺术家、音乐集、发行时间、作曲家、等。包含信息的多少取决于制作或为这个音乐添加标签的人。在绝大多数情况下,我们至少可以从中获取歌曲名和艺术家的标签。
原创,转载说明出处 http://hi.baidu.com/flash_as3
这些数据是我们用ActionScript通过访问sound对象的id3属性来得到的。
原创,转载说明出处 http://hi.baidu.com/flash_as3
这些属性是flash.media.ID3Info 类的实例,它包含下面的一些具体属性:
原创,转载说明出处 http://hi.baidu.com/flash_as3
album
artist
comment
genre
songName
TRack
year
所以要想知道音乐的名字,你可以这样做:
_sound.id3.songName
上面只是一个例子,注意:我们不能在音乐还没有真正下载到swf文件中就去获取这些信息。如果想在声音文件刚刚创建完毕或者刚刚开始播放就获取这些信息,将是不成功的。因为那时声音文件的具体信息还没下载到swf文件中,所以此时没有相关数据可用。
我们如何知道知道声音文件的id3相关数据已经到达swf文件中了呢?幸运的是,sound对象有个ID3事件可供我们侦听,这个事件发生了,就表明可以安全地读取id3数据了。Sound对象继承了EventDispatcher类,因此我们可以用事件侦听函数来侦听这个事件(这个事件被定义为flash.events.Event.ID3),然后添加一个事件处理函数,来读取id3的信息。
下面的例子创建了一个文本框,并在其中列出了id3的所有信息
package {
import flash.display.Sprite;
import flash.media.Sound;
import flash.net.URLRequest;
import flash.events.Event;
import flash.text.TextField;
public class ID3Reader extends Sprite {
private var _sound:Sound;
public function ID3Reader ( ) {
_sound = new Sound(new URLRequest("song.mp3"));
_sound.addEventListener(Event.ID3, onID3);
_sound.play( );
}
public function onID3(event:Event):void {
// Create a text field and display it
var id3Display:TextField = new TextField( );
addChild(id3Display);
id3Display.x = 10;
id3Display.y = 20;
id3Display.width = 200;
id3Display.height = 200;
id3Display.background = true;
id3Display.multiline = true;
id3Display.wordWrap = true;
// Add some info about the song to the text field
id3Display.text += _sound.id3.songName + "/n";
id3Display.text += _sound.id3.artist + "/n";
id3Display.text += _sound.id3.album + "/n";
id3Display.text += _sound.id3.year + "/n";
}
}
}
原创,转载说明出处 http://hi.baidu.com/flash_as3
译者注:上面的这个例子的使用方法:
1, 新建立一个fla文件,命名,保存;
2, 找一首歌曲(mp3格式)复制到fla的那个目录里面,命名为song.mp3(mp3是后缀名);
3, 新建一个.as文件,把上述代码复制到其中,保存为ID3Reader.as保存在fla同一个目录;
4, 把fla文件的document属性(选中舞台,打开属性面板就能看到)设置为ID3Reader;
5, 按ctrl+enter测试。
但是译者在测试的时候,用了多种方法也没能解决中文显示成乱码的问题,望读者不吝赐教。
原创,转载说明出处 http://hi.baidu.com/flash_as3