2012-04-01 80 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