2014-04-03 57 views
1

我已經通過各種網站編譯了不同的代碼,介紹如何爲我的網站創建自己的MP3播放器。按鈕工作得很好。滑塊,可視化器和計時器都工作正常。MP3音樂播放器 - AS3,XML和列表框

我只想要列表框,以便它直接從XML文件(playlist.xml)中提取數據。我想我可能會使用類似於播放按鈕的功能,但是它可以讓每個新的.addItem都是我在xml中的。

下面是對XML的代碼和列表框:

XML ::

var mySongList:XMLList;  
    var myTotal:Number;  
    var s:Sound;  

var c:SoundChannel;  
var currentSong:Number=0;  
var lastPosition:Number=0;  
var dragging:Boolean=false;  
var boundingBox:Rectangle=new Rectangle(0,0,175,0); 
var pos:int = 0; 

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


function processXML(e:Event):void { 
    var myXML:XML=new XML(e.target.data); 
    mySongList=myXML.song; 
    myTotal=mySongList.length(); 
    myXMLLoader.removeEventListener(Event.COMPLETE, processXML); 
    myXMLLoader=null; 
    playSong(0); 
}  

function playSong(mySong:Number):void { 
    var myTitle=mySongList[mySong][email protected]; 
    var myArtist=mySongList[mySong][email protected]; 
    var myURL=mySongList[mySong][email protected]; 
    //displays the song title and artis in the text fields 
    title_txt.text=myTitle; 
    artist_txt.text=myArtist; 

    if (c) { 
     c.stop(); 
     c=null; 
    } 

    s = new Sound(); 
    s.load(new URLRequest(myURL)); 
    c=s.play(lastPosition); 
    c.addEventListener(Event.SOUND_COMPLETE, nextSong); 
    visTimer.start(); 
    c.stop(); 
} 

這裏是列表框代碼:

listbox.addItem({label:"Song1"}); 
listbox.addItem({label:"Song2"}); 

listbox.addEventListener (MouseEvent.CLICK, playList); 

function playList(e:MouseEvent):void { 
    c.stop(); 
    c = s.play(0); 
    tB3(); 
    txtTotalTime.text = timeCalculation(s.length); 
    txtCurrentTime.text = timeCalculation (c.position); 
    myTimer.start(); 
    seekSlider.minimum = 0; 
    seekSlider.maximum = Math.floor(s.length); 
    Volume(); 

}  

我在其他代碼還有其他功能,如seekSliders,歌曲計時器和音量。

有人可以向我解釋我將如何去從playlist.xml拉動信息,以便它將直接發送到列表框?

謝謝你的幫助。

回答

0

把你的XML格式,這樣

<song> 
    <songtitle>Some title here</songtitle> 
    <url> song name or url</url> 
    <songtime> can add more data like above under each song</songtime>//example 
</song> //copy above and add info for each song and save it as xml 


var i:unit; 
var songurl:URLRequest; 

加載XML文件:

var myXML:XML = new XML(); 
var XML_URL:String = "link to your xml file here"; 
var myXMLURL:URLRequest = new URLRequest (XML_URL); 
myLoader:URLLoader = new URLLoader (myXMLURL); 
myLoader.addEventListener(event.COMPELETE, xmlLoaded); 

現在你必須把它們放在你列出

function xmlLoaded(event:Event):void{ 
myXML= XML(myLoader.data); 
var firstsong:String = myXML..song.songtitle[0]; 
var firsturl:String = myXML..song.url[0]; 
songURL = new URLRequest(firsturl); 

for each (var song:XML in myXML..song){ 
i++; 
var songtitle:String = song.songtitle.toString(); 
var songtime:String = song.songtime.toString(); 
var songurl:String = song.url.toString(); 
list.addItem({label:i+". "+songtitle"-"+songtime, urlstring: songurl}); 
} 

現在你只需要加載歌曲URL並播放它並製作一個函數,當你點擊每個項目時,它會更改urlstring並加載,然後播放它。

您可能會將歌曲信息放入xml文件中,並將其加載到您的列表中。

+0

你好,我試圖使用你已經投入,但它只是創造了一些更多的錯誤。你能澄清一下list.additem的編碼嗎?我知道標籤就是標籤清單所需要的。我如何着手從現有的XML中提取列表?我是否更改xmlLoader以使其位於URLString中?對不起,我在某些方面不太熟悉xml和AS3 – Jule

+0

嗨,我認爲這是你需要的,這是非常好的/詳細的教程youtube.com/watch?v=x7YRwFoZEt0 –

+0

很好謝謝你。我不知道我是怎麼錯過這個的。 – Jule