2011-10-14 63 views
0

任何幫助將不勝感激。AS3在第一個完成後播放第二個音頻文件

我加載聲音是這樣的:

var mySound:Sound = new Sound(); 
mySound.load(new URLRequest("audio/filename.mp3")); 
mySoundChannel:SoundChannel = mySound.play(); 

然後我加入一個偵聽器,並試圖調用函數與SOUND_COMPLETE事件,像這樣:

mySoundChannel.addEventListener(Event.SOUND_COMPLETE,audioComplete); 
function audioComplete(Event:Event){ 
trace("done!"); 
} 

然而,我不斷收到此錯誤:「1046:類型未找到或不是編譯時常量:事件。」

任何人都可以給我一個暗示我做錯了什麼嗎?

謝謝。

+1

@The_asMan導入事件類是沒有必要 –

回答

0

感謝你們誰迴應。我最終找到了一個更好的方法來做到這一點。如果有人運行到同樣的問題,這裏是什麼工作對我來說:

var mySound:Sound = new Sound(); 
var mySoundURL:URLRequest = new URLRequest("myfile.mp3"); 
var mySoundChannel:SoundChannel = new SoundChannel(); 
mySound.load(mySoundURL); 
mySoundChannel = mySound.play(); 
mySoundChannel.addEventListener(Event.SOUND_COMPLETE, endMySound); 

function endMySound(e:Event):void{ 
trace("sound is complete!"); 
} 
0

嘗試改變

function audioComplete(Event:Event){

function audioComplete(e:Event){

這是一個好主意,不是你的變量名使用類名。它可能會混淆編譯器和程序員試圖讀取代碼。

0

導入事件類: import flash.events.Event

package 
{ 
    
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.media.Sound; 
    import flash.media.SoundChannel; 
    import flash.net.URLRequest; 

    
    public class Test extends Sprite 
    { 
     
     private var _sound : Sound: 
     private var _soundChannel : SoundChannel: 

     public function Test() : void 
     { 
            playSound("audio/filename.mp3"); 
        } 
    
     private function playSound(url : String) : void 
     { 
      // start sound here 
      _sound = new Sound(); 
      _sound.load(new URLRequest(url)); 
      _soundChannel = mySound.play(); 

      _soundChannel.addEventListener(Event.SOUND_COMPLETE, onSoundComplete); 
        } 

     private function onSoundComplete(event : Event) : void 
     { 
      // sound is complete 
      _soundChannel.removeEventListener(Event.SOUND_COMPLETE, onSoundComplete); 

      // play next sound 
        } 
    }    
} 
1

變化

function audioComplete(Event:Event){ 

function audioComplete(event:Event){ 

AS是區分大小寫的。 eventEvent不一樣。 Event是一個類的名稱。 event是您分配給類型局部變量的名稱Event

此外,聲音以異步方式加載到Flash中。這意味着當您撥打sound.load()時,Flash Player將開始將聲音加載到新線程中,並在加載聲音時繼續下一行代碼。當聲音完全加載時觸發Event.COMPLETE事件,當聲音完成播放時不是

觸發功能在聲音播放完畢,使用setTimeout

var mySound:Sound = new Sound(); 
mySound.load(new URLRequest("audio/filename.mp3")); 
mySound.addEventListener(Event.COMPLETE, soundLoaded); 

function soundLoaded(e:Event):void { 
    mySound.play(); 
    setTimeout(audioComplete, mySound.length); 
} 
function audioComplete(){ 
    trace("done!"); 
} 
+0

非常感謝清除此爲我說話。這正是我需要的。 –

相關問題