ID3返回null - ActionScript

时间:2014-05-18 18:11:54

标签: flash actionscript id3

var sound:Sound;
var url:URLRequest=new URLRequest("http://XXXXXXXXXXXXXX");
sound = new Sound();
var context:SoundLoaderContext=new SoundLoaderContext(0,false);
sound.addEventListener(Event.ID3, id3Handler);
sound.load(url,context);

var channel:SoundChannel = sound.play();

playB.addEventListener(MouseEvent.CLICK, fl_ClickToPlayStopSound_2);

var fl_ToPlay_2:Boolean = false;

function id3Handler(event:Event):void 
{
    var id3:ID3Info = sound.id3;
    trace(id3.songName);
}

function fl_ClickToPlayStopSound_2(evt:MouseEvent):void
{
    if(fl_ToPlay_2)
    {
        sound = new Sound();
    sound.addEventListener(Event.ID3, id3Handler);
        sound.load(url,context);
        channel = sound.play();
        trace(sound.id3.songName);
        trace(sound.id3.artist);
    }
    else
    {
        channel.stop();
        sound.close();
    }
    fl_ToPlay_2 = !fl_ToPlay_2;
}

我正在为我的在线广播(音频流)开发播放器。 “playB”是我的播放/停止按钮,它按预期工作。我的问题是id3标签...你可以看到我正在做一个歌曲名称和艺术家的痕迹,但他们都返回null。 (我已经将歌曲名id3添加到文件中)

提前致谢

1 个答案:

答案 0 :(得分:0)

您需要等待sound对象加载才能访问其数据。 load()方法是异步的,这意味着您需要添加一个事件监听器来了解负载何时完成:

public function Sound_id3Example()
{
    snd.addEventListener(Event.ID3, id3Handler);
    snd.load(new URLRequest("mySound.mp3"));
}

private function id3Handler(event:Event):void 
{
    var id3:ID3Info = snd.id3;
    trace(id3.songName);
}

有一个如何在Adobe Actionscript documentation for Sound::id3

中执行此操作的示例