Actionscript 3 如何在ActionScript 3中随机播放嵌入式MP3?

Actionscript 3 如何在ActionScript 3中随机播放嵌入式MP3?,actionscript-3,flash,Actionscript 3,Flash,我已经破解了一些允许播放外部MP3的代码,但似乎我添加的文件越多,播放变得越喜怒无常。具体地说,它似乎会截断每个MP3的开头和结尾,而且播放效果不可预测。我应该提到的是,MP3非常小。它们是一个单独的词,当随机播放时,它们的意思是喷出一种外来的诗歌。当我在电脑硬盘上本地播放SWF时,播放是平稳的,但当我在线测试时,情况开始变得不稳定。这是我正在使用的代码 import flash.media.Sound; import flash.net.URLRequest; import flash.med

我已经破解了一些允许播放外部MP3的代码,但似乎我添加的文件越多,播放变得越喜怒无常。具体地说,它似乎会截断每个MP3的开头和结尾,而且播放效果不可预测。我应该提到的是,MP3非常小。它们是一个单独的词,当随机播放时,它们的意思是喷出一种外来的诗歌。当我在电脑硬盘上本地播放SWF时,播放是平稳的,但当我在线测试时,情况开始变得不稳定。这是我正在使用的代码

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();
 }
我知道如何将MP3导出到AS(我想),但我不知道如何让它们永远随机播放。另外,不确定垃圾收集是否会成为一个问题。希望有人能帮我把它哑下来,因为我对ActionScript完全不熟悉。非常感谢您的帮助

当我在电脑硬盘上本地播放SWF时,播放是平稳的,但当我在线测试时,事情开始变得不稳定

这会引起一个大信号,暗示下载文件时存在问题

这两行代码将背靠背执行,这是一个问题:

sound.load(new URLRequest("parts/"+songs)); 
soundChannel=sound.play();
问题是声音文件不会立即下载。幸运的是,还有下载完成和下载进度事件

有关详细参考信息,请查看以下内容:

下面是一些特定于您的问题的代码:

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();
}
所以事情的顺序是这样的

  • 加载声音
  • 等待声音下载
  • 播放下载的声音
  • 等待声音结束播放
  • 加载新的声音

  • 你不需要这样做,但是如果你不担心额外的1Mb下载,也不担心每次需要更多单词时都需要重新编译,那么这可能是一个更好的方法。如果用户有所有的音频,它会播放得更流畅。谢谢你的信息。所以,如果我想正确理解,就没有必要在SWF中嵌入音频?这样做只需要1 MB左右,因为所有样本都非常短。奇怪的是,当我使用192 kbps的立体声MP3时,声音播放效果更好,但我降低了比特率,播放变得更不稳定。在96kbps的单声道速度下,几乎无法辨认。如果可能的话,我想将音频嵌入到SWF中,这样用户就可以下载该文件进行脱机播放。很抱歉我不知道,但是您提供的链接只包含外部加载的声音。我还不清楚如何让我所有的MP3成为一门课的一部分,并随机调用它们。我从您的个人资料中看到,您对AS3很熟悉。如果您有兴趣指导我完成这个过程,我很乐意以某种方式补偿您,但是在尝试插入代码几次之后,Flash返回语法错误。我找不到一个下午你,所以请随时给我写信在jcwittliff@gmail.com如果你感兴趣的话。