我的AS3项目中有2个按钮,可以加载.mp3文件然后播放它们。我有2个按钮可以切换那些不起作用的文件。我收到一个错误说:
Error: Error #2037: Functions called in incorrect sequence, or earlier call was unsuccessful.
at flash.media::Sound/_load()
at flash.media::Sound/load()
at player_fla::MainTimeline/playMusic1()
我认为这意味着文件在尝试播放之前没有加载,是吗?如何在播放之前检查文件是否已加载?
这是我的代码:
function playMusic1(evt:MouseEvent):void{
channel.stop();
channel2.stop();
songPosition = 0;
var soundFile2:URLRequest = new URLRequest("http://r.jaxna.com/mp3Player/slushy.mp3");
myMusic2.load(soundFile2, myContext);
channel = myMusic.play(songPosition);
channel2 = myMusic2.play(songPosition);
}
function playMusic2(evt:MouseEvent):void {
channel.stop();
channel2.stop();
songPosition = 0;
var soundFile3:URLRequest = new URLRequest("http://r.jaxna.com/mp3Player/kingRight.mp3");
myMusic2.load(soundFile3, myContext);
channel = myMusic.play(songPosition);
channel2 = myMusic2.play(channel.position);
答案 0 :(得分:4)
声音文件在Flash中异步加载。侦听Event.COMPLETE事件,并在该事件处理程序中添加代码以检查两者是否都已加载然后播放。
一个例子:
//Before you load,
myMusic2.addEventListener(Event.COMPLETE, musicLoaded);
//Event listener
private function musicLoaded(e:Event):void {
//play logic here
channel = myMusic.play(songPosition);
channel2 = myMusic2.play(channel.position);
}
答案 1 :(得分:0)
看起来您使用相同的Sound
对象来加载另一个声音文件。文档明确声明您不能重复使用以前加载的声音对象来加载另一个声音文件(请参阅load
函数),每次要加载时都必须创建一个new Sound()
对象。发出不同的声音。加载后,您可以根据需要多次播放该声音,并从声音的任何一点开始播放。
如果您只播放这些特定声音文件,则可以创建2个声音对象并预先加载它们。