Flash中的流媒体音频正在播放多次,重叠

时间:2011-09-13 00:30:45

标签: flash actionscript-3 audio stream

以下AS3代码有时会导致音频多次播放,几乎同时像疯狂的回声一样。它通常适用于该URL,但当我使用https://soundcloud.com网址时,它总是吓坏了。在极少数情况下,我认为问题甚至发生在本地文件中。我从其他地方复制了这段代码,所以我不完全理解它。你看到这个实现有问题还是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();  
}

1 个答案:

答案 0 :(得分:2)

您在play()对象上调用Sound两次。一旦你创建变量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代码,因为它没有做任何功能。