在ActionScript3中,如何创建XML音乐播放器?

时间:2011-12-20 04:45:25

标签: xml flash actionscript-3

我是AS3的新手,我正在尝试制作一个XML音乐播放器。由于未知的原因,我编码的音乐播放器(GUI被放置在舞台上,因此不包括编码。)将不显示文本或播放音乐。我到目前为止的代码是:

var my_songs:XMLList;
var my_total:Number;

var my_sound:Sound;
var my_channel:SoundChannel;

var current_song:Number = 0;

var song_position:Number;
var song_paused:Boolean;

var myXMLLoader:URLLoader = new URLLoader();
myXMLLoader.load(new URLRequest("playlist.xml"));
myXMLLoader.addEventListener(Event.COMPLETE, processXML);

function processXML(e:Event):void {
    var myXML:XML = new XML(e.target.data);

    my_songs = myXML.SONG;
    my_total = my_songs.length();

    //playSong(0);

    myXMLLoader.removeEventListener(Event.COMPLETE, processXML);
    myXMLLoader = null;

}

function playSong(mySong:Number):void {
    var myTitle = my_songs[mySong].@TITLE;
    var myURL = my_songs[mySong].@URL;

    title_txt.text = myTitle;

    if (my_channel) {
        my_channel.stop();
        my_channel.removeEventListener(Event.SOUND_COMPLETE, onNext);
    }

    my_sound = new Sound();
    my_sound.load(new URLRequest(myURL));
    my_channel = my_sound.play();
    my_channel.addEventListener(Event.SOUND_COMPLETE, onNext);
}
//Jumps to the next track in the list.
next_btn.addEventListener(MouseEvent.CLICK, onNext);
function onNext(e:Event):void {
    current_song++;
    if (current_song>=my_total) {
        current_song=0;
    }
    playSong(current_song);
}
//Jumps position back to previous track in the list.
prev_btn.addEventListener(MouseEvent.CLICK, onPrev);
function onPrev(e:MouseEvent):void {
    current_song--;
    if (current_song<0) {
        current_song = my_total-1;
    }
    playSong(current_song);
}
//Pauses music, causing current song to jump back to the beginning when play resumes.
pause_btn.addEventListener(MouseEvent.CLICK, onPause);
function onPause(e:MouseEvent):void {
    if (my_channel) {
        song_position = my_channel.position;
        my_channel.stop();
        song_paused=true;
    }
}
//Plays music.
play_btn.addEventListener(MouseEvent.CLICK, onPlay);
function onPlay(e:MouseEvent):void {
    if (song_paused) {
        my_channel = my_sound.play(song_position);
        song_paused=false;
    } else if (!my_channel) {
       playSong(current_song);
    }
}

如果有人可以指出任何错误和修正,那将非常感激。

1 个答案:

答案 0 :(得分:-1)

乍一看,在您添加侦听器之前,我似乎在加载XML。尝试重写这些行:

var myXMLLoader:URLLoader = new URLLoader();
myXMLLoader.load(new URLRequest("playlist.xml"));
myXMLLoader.addEventListener(Event.COMPLETE, processXML);

到此:

var myXMLLoader:URLLoader = new URLLoader();
myXMLLoader.addEventListener(Event.COMPLETE, processXML);
 myXMLLoader.load(new URLRequest("playlist.xml"));

除此之外,你的代码似乎工作正常。