ID3 возвращает значение null — ActionScript

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 в файлы)

заранее спасибо


person user3650328    schedule 18.05.2014    source источник


Ответы (1)


Вам нужно дождаться загрузки объекта 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 для Sound::id3

person duncanhall    schedule 18.05.2014
comment
и где мне вызвать Sound_id3Example()? в любом случае, я добавил функцию id3Handle и вызвал sound.addEventListener(Event.ID3, id3Handler); перед звуковой нагрузкой. Он никогда не попадает в функцию id3Handler - person user3650328; 19.05.2014
comment
Я собираюсь отредактировать основной пост с текущим кодом, который у меня есть. - person user3650328; 19.05.2014