如何在soundmanager2中声音后启动声音

时间:2011-09-24 10:15:26

标签: javascript jquery soundmanager2

如何在soundmanager2中声音后启动声音,我的意思是当第一个声音结束时,第二个声音开始,第二个结束第三个开始等等等。

4 个答案:

答案 0 :(得分:6)

var soundArray = ['sound1', 'sound2', ...];
var chain = function (sound) {
soundManager.play(sound, { 
    multiShotEvents: true,
    onfinish: function () {
        var index = soundArray.indexOf(sound);
        if (soundArray[index + 1] !== undefined) {
            chain(soundArray[index + 1]);
        }
    }});
};

chain(soundArray[0])

托盘使用递归,唯一的问题可能发生,当在数组中你把相同的声音放两次(链无穷大)

答案 1 :(得分:1)

有一个如何在documentation中执行此操作的示例(请参阅演示4a)。 play方法将对象作为参数。该对象包含一组选项。其中一个选项是onfinish回调函数:

soundManager.play('firstSound',{
    multiShotEvents: true,
    onfinish:function() {
        soundManager.play('secondSound');
    }
});

必须将multiShotEvents选项设置为true,以便在完成每个声音后触发onfinish事件。默认情况下,只有在声音结束后才会触发。

你可以真正按照你想要的方式排队多少声音。

答案 2 :(得分:1)

花了3个小时才弄明白......但是这里是:

soundManager.play('sound1',{
  multiShotEvents: true,
  onfinish:function() {
    soundManager.play('sound2',{
      multiShotEvents: true,
      onfinish:function() {
        soundManager.play('sound3');
      }
    });
  }
});

答案 3 :(得分:1)

除了Ashot的答案和所有其他内容之外,您可以在创建声音时设置onfinish功能,而不仅仅是在播放时,例如:

var demo2Sound = soundManager.createSound({
 url: '../mpc/audio/CHINA_1.mp3',
 onfinish: function() {
   soundManager._writeDebug(this.id + ' finished playing');
 }
});

...如果您需要在声音播放后更改onfinish功能,您可以这样做:

demo2Sound._onfinish = function(){ 
  //now this function will override the previous handler 
};