在播放下一个声音之前等待声音停止

时间:2017-04-15 09:20:55

标签: javascript audio phaser-framework

您好我在Phaser中构建了一个应用程序,并希望创建一个包含两个声音的序列:

  1. "你有" (加载并存储为audioSound [0])
  2. "成品" (同上,audioSound [1])
  3. 然后我可以继续重复使用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);
                }
            });
    

1 个答案:

答案 0 :(得分: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();

    ...
}