下面的AS3代码有时会导致音频播放多次,几乎同时播放,就像一个疯狂的回声。它通常工作正常的URL,但当我使用https://soundcloud.com URL时,它总是崩溃。在极少数情况下,我认为这个问题甚至发生在本地文件上。我从其他地方复制了这段代码,所以我不完全理解它。你觉得这种实现有什么问题吗?还是Flash太疯狂了?
var url:String = "http://md9.ca/portfolio/music/seaforth.mp3";
var request:URLRequest = new URLRequest(url);
var s:Sound = new Sound();
s.addEventListener(Event.COMPLETE, completeHandler);
s.load(request); var song:SoundChannel = s.play();
song.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler);
var time:Timer = new Timer(20);
time.start();
function completeHandler(event:Event):void {
event.target.play();
}
function soundCompleteHandler(event:Event):void {
time.stop();
}
在Sound
对象上调用play()
两次。一次是在你创建变量song
时,另一次是在文件加载完成时。
您可能希望以不同的方式构建代码。
var url:String = "http://md9.ca/portfolio/music/seaforth.mp3";
var song:SoundChannel;
var request:URLRequest = new URLRequest(url);
var s:Sound = new Sound();
s.addEventListener(Event.COMPLETE, onLoadComplete );
s.load(request);
function onLoadComplete(event:Event):void
{
song = s.play();
song.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler);
s.removeEventListener( Event.COMPLETE, onLoadComplete );
}
function soundCompleteHandler(event:Event):void
{
trace( 'sound is complete' );
song.removeEventListener( Event.SOUND_COMPLETE, soundCompleteHandler );
}
我删除了Timer
代码,因为它没有做任何功能。