2012-03-26 94 views
0

所以這一個讓我難住。我的網站計劃是從XML文件中提取音樂曲目,這些文件充當菜單按鈕加載的各種.swfs的背景音樂。即點擊「家」,它會將您帶回家.swf並播放適當的音樂。我想通過XML來做到這一點,而不是直接將音樂附加到.swf以減少加載時間(同步不是問題),因爲我似乎無法保留音頻質量而不會顯着增大.swf。AS3 - 帶單軌循環的XML播放列表

我遇到了兩個問題:一個是用當前代碼,音樂只播放一次,並且不循環。另一個是我希望功能可以播放一首歌作爲介紹,然後繼續循環播放。也就是說,點擊主頁按鈕,播放介紹,然後是循環部分,並且除非您再次打開主頁,否則不會返回到介紹頁面。我似乎無法弄清楚如何管理其中的任何一種功能,而無需爲每個按鈕創建一個獨特的功能。

下面是我使用的代碼:

var my_songs:XMLList; 
var my_total:Number; 

var my_sound:Sound; 
var my_channel:SoundChannel; 

var current_song:Number; 

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 myURL = my_songs[mySong][email protected]; 

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

    my_sound = new Sound(); 
    my_sound.load(new URLRequest(myURL)); 
    my_channel = my_sound.play(); 
    my_channel.addEventListener(Event.SOUND_COMPLETE, playSong); 
} 

test_btn.addEventListener(MouseEvent.CLICK, onPlay); 
function onPlay(e:MouseEvent):void { 
     playSong(0); 
} 

預先感謝任何幫助,您可以給!

回答

0
YourSongstarting(0,999); // how ever you call to play the song 

這上面會重複歌曲永遠。我建議你流式傳輸音頻文件,因爲這樣可以更快地加載歌曲,然後你就可以將歌曲保存在內存中。如果這個網站是音樂文件,你仍然可以使用xml或任何其他外部文本文件作爲音軌位置或者直接在flash/class文件中具體。

您希望控制的任何事件只需將「緩衝區」值與100%進行比較。查看流音頻as3有很多源代碼的教程,如果需要讓我知道我可以給你一個例子。

+0

感謝Parele!我做了一些研究,我相信我已經通過在腳本開頭聲明SoundLoaderContext變量來設置流,然後更改「my_sound.load(newURLRequest(myURL));」到「my_sound.load(newURLRequest(myURL),上下文);」 - 至少這似乎是所有需要的,但我必須稍後再測試它。 – DoomJTHM 2012-03-26 21:39:22

+0

不幸的是,我不太清楚我應該如何處理您提供的線路。我猜我想定義一個像這樣的新功能?我只是不確定它應該放在哪裏或者它完成了什麼。對於新問題抱歉,迄今爲止您的幫助非常棒! = X – DoomJTHM 2012-03-26 21:42:39

0

你接近

var my_songs:XMLList; 
var my_total:Number; 

var my_sound:Sound; 
var my_channel:SoundChannel; 

var current_song:Number; 

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(e:Event):void { 
    if(current_song > my_total) 
     current_song = 0; 

    var myURL = my_songs[current_song++][email protected]; 

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

    my_sound = new Sound(); 
    my_sound.load(new URLRequest(myURL)); 
    my_channel = my_sound.play(); 
    my_channel.addEventListener(Event.SOUND_COMPLETE, playSong); 
} 

test_btn.addEventListener(MouseEvent.CLICK, onPlay); 
function onPlay(e:MouseEvent):void { 
     playSong(e); 
}