2012-04-01 81 views
0

我有一些代碼允許播放外部MP3,但似乎我添加的文件越多,播放變得更溫和。具體來說,它似乎截斷每個MP3的開始和結束,並且播放是不可預測的。我應該提到的是MP3很小。它們是個別的詞語,意思是在隨機播放時噴出一種外來的詩歌。當我在電腦的硬盤上本地播放SWF時,播放非常流暢,但是當我在線測試時,情況開始變得不穩定。這是我正在使用的代碼。如何隨機化ActionScript 3中的嵌入式MP3播放?

import flash.media.Sound; 
import flash.net.URLRequest; 
import flash.media.SoundChannel; 
import flash.events.Event; 

playsong(); 
//var songs:Array=new Array("part0.mp3","part1.mp3","part2.mp3","part3.mp3","part4.mp3","part5.mp3","part6.mp3","part7.mp3","part8.mp3","part9.mp3","part10.mp3","part11.mp3","part12.mp3","part13.mp3","part14.mp3","part15.mp3","part16.mp3","part17.mp3","part18.mp3","part19.mp3","part20.mp3","part21.mp3","part22.mp3","part23.mp3","part24.mp3","part25.mp3","part26.mp3","part27.mp3","part28.mp3","part29.mp3","part30.mp3","part31.mp3","part32.mp3","part33.mp3","part34.mp3","part35.mp3","part36.mp3","part37.mp3","part38.mp3","part39.mp3","part40.mp3","part41.mp3","part42.mp3","part43.mp3","part44.mp3","part45.mp3","part46.mp3","part47.mp3","part48.mp3","part49.mp3","part50.mp3","part51.mp3","part52.mp3","part53.mp3","part54.mp3","part55.mp3","part56.mp3","part57.mp3","part58.mp3","part59.mp3","part60.mp3","part61.mp3","part62.mp3","part63.mp3","part64.mp3","part65.mp3","part66.mp3","part67.mp3","part68.mp3","part69.mp3","part70.mp3","part71.mp3","part72.mp3","part73.mp3","part74.mp3","part75.mp3","part76.mp3","part77.mp3","part78.mp3","part79.mp3","part80.mp3","part81.mp3","part82.mp3","part83.mp3","part84.mp3","part85.mp3","part86.mp3","part87.mp3","part88.mp3","part89.mp3","part90.mp3","part91.mp3","part92.mp3","part93.mp3","part94.mp3","part95.mp3","part96.mp3","part97.mp3","part98.mp3","part99.mp3","part100.mp3","part101.mp3","part102.mp3","part103.mp3","part104.mp3","part105.mp3","part106.mp3","part107.mp3","part108.mp3","part109.mp3","part110.mp3","part111.mp3","part112.mp3","part113.mp3","part114.mp3","part115.mp3","part116.mp3","part117.mp3","part118.mp3","part119.mp3","part120.mp3","part121.mp3","part122.mp3","part123.mp3","part124.mp3","part125.mp3","part126.mp3"); 
var sound:Sound; 
var soundChannel:SoundChannel; 
var randnum:uint; 
function playsong() 
{ 
randnum=Math.floor(Math.random()*127); 
sound=new Sound(); 
var songs:String= "part" + randnum + ".mp3"; 
sound.load(new URLRequest("parts/"+songs)); 
soundChannel=sound.play(); 
soundChannel.addEventListener(Event.SOUND_COMPLETE,playrandomsong); 
} 
function playrandomsong(e:Event) 
{ 
playsong(); 
} 

我知道如何導出AS的MP3(我認爲),但我不知道如何讓他們隨機播放,永遠。另外,不確定垃圾收集是否會成爲問題。希望有人能爲我貶低它,因爲我完全不熟悉ActionScript。任何幫助是極大的讚賞。

回答

0

當我在本地播放該SWF關閉我的電腦的硬盤,播放流暢,但是當我在網上測試它,事情開始變得波濤洶涌

這就提出了一個很大的標誌暗示的下載文件存在問題。

的這兩行代碼會被執行背靠背,這是一個問題:

sound.load(new URLRequest("parts/"+songs)); 
soundChannel=sound.play(); 

的問題在於聲音文件不會即刻下載。幸運的是,還有下載完成和下載進度的事件。

檢查了這一點進行了詳細的參考:http://www.kirupa.com/developer/as3/playing_sounds.htm

這裏是一些具體到你的問題代碼:

soundChannel.addEventListener(Event.SOUND_COMPLETE, playrandomsong); 

function playsong() { 
    ...  
    sound.load(new URLRequest("parts/"+songs)); 
    sound.addEventListener(Event.COMPLETE, soundLoaded); 
} 

function soundLoaded(e:Event) { 
    soundChannel = sound.play(); 
} 
function playrandomsong(e:Event) { 
    playsong(); 
} 

所以事件的順序在這裏去

  1. 加載聲音
  2. 等待聲音下載
  3. 播放下載的聲音
  4. 等待提示音結束播放
  5. 加載新的聲音
+0

你不*需要*,但如果你不擔心額外的1Mb的下載前期,而且您不必擔心每次需要更多單詞時都需要重新編譯,那麼這可能是更好的方法。如果用戶預先準備好了所有的音頻,它將播放更平滑。 – DingoEatingFuzz 2012-04-02 01:01:49

+0

感謝您的信息。那麼,如果我要正確理解,則不需要在SWF中嵌入音頻?這樣做只需要1MB左右,因爲所有的樣本都很短。奇怪的是,當我使用192kbps立體聲MP3時,聲音播放效果更好,但是較低的我放棄了比特率,播放效果越來越差。在96 kbps單聲道時,它幾乎不可識別。如果可能,我想將音頻嵌入到SWF中,以便用戶可以下載文件以進行離線播放。 – 2012-04-02 01:01:50

+0

對不起,我的無知,但你提供的鏈接專門涵蓋外部聲音加載。我仍然不清楚如何將所有MP3作爲單個課程的一部分,並隨機調用它們。我從你的檔案中看到你對AS3很熟悉。如果您有興趣在整個流程中引導我,我很樂意以某種方式向您提供幫助,但經過多次嘗試插入代碼後,Flash返回語法錯誤。我無法找到一種方式來提醒您,所以如果您有興趣,請隨時在[email protected]給我留言。 – 2012-04-02 01:31:26