2017-04-15 121 views
0

您好我已經建立了移相器的應用程序,並要創建兩個聲音的序列之前停止:等待一個聲音播放下一個聲音

  1. 「你」(加載和audioSound [0存儲])
  2. 「完成」(同上,audioSound [1])

然後我就可以繼續再使用1並在2不同的單詞/句子要做到這一點,我需要的聲音在順序播放。

在使用的瞬間:

audioSound[0].play(); 

audioSound[1].play(); 

othercode... 

劇目在同一時間。有關如何讓聲音按順序播放的任何想法,只有在第二個完成後纔會繼續播放othercode...

提前致謝!

編輯:@ Julian的回答後 嗨 - 要清楚我有以下代碼將項目彈出到隊列中,然後播放它們。雖然隊列中的項目按順序播放,但隊列播放事件之後的函數/代碼與聲音並行執行,而不是在聲音完成時執行。

function playSequence(soundArray) { 
    soundArray[0].play(); 
    soundArray.forEach(function(element, index, array) { 
     if (soundArray[index + 1]) { 
      soundArray[index].onStop.addOnce(function() { 
       soundArray[index + 1].play(); 
       }, this); 
      } 
     }); 
+0

使用媒體活動https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events –

+1

我還沒說完理解你的問題, 我的朋友。你想按順序播放兩個聲音(你玩一個,一旦你完成了遊戲,然後第二個玩),並且是無限的?你還談論了繼續使用不同的代碼,這是否意味着? –

+0

嘿,謝謝你們兩位。 @ Julian - 我想讓聲音依次播放。目前發生的情況是,與聲音2同時發生1次播放,然後兩個代碼開始執行。理想情況下,我希望在播放其他代碼之前依次播放聲音。那有意義嗎? – user7289

回答

1

你可以試試這個:

function preload() { 

    game.load.audio('sound-explosion', 'explosion.wav'); 
    game.load.audio('sound-lose', 'lose.mp3'); 

} 

var soundlose; 
var soundexplosion; 

function create() { 
    //Add sounds 
    soundexplosion = game.add.audio('sound-explosion'); 
    soundlose = game.add.audio('sound-lose'); 

    //Prepare the next event once the sound finishes playing 
    soundexplosion.onStop.addOnce(function() { soundlose.play(); }, this); 
    soundlose.onStop.addOnce(function() { console.log('Hello!'); }, this) 

    //Play sound... 
    soundexplosion.play(); 

    ... 
} 
+0

謝謝@Julian - 一旦我這樣做,音頻就會按順序播放,但代碼的執行與音頻播放並行繼續進行 - 如何讓代碼的執行等到音頻​​結束? (見上面編輯過的q) – user7289

+0

哇!如果你想在事件之後執行代碼,嘗試將onStop放在數組的最後一個元素中:'soundArray [soundArray.length - 1] .onStop ...' –