7

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

4

4 回答 4

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])

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

于 2012-06-06T09:36:02.513 回答
1

我花了 3 个小时才弄清楚.. 但这里是:

soundManager.play('sound1',{
  multiShotEvents: true,
  onfinish:function() {
    soundManager.play('sound2',{
      multiShotEvents: true,
      onfinish:function() {
        soundManager.play('sound3');
      }
    });
  }
});
于 2012-04-07T16:16:36.143 回答
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 
};
于 2013-10-14T03:33:18.043 回答
1

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

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

multiShotEvents选项必须设置为trueonfinish每个声音完成时触发事件。默认情况下,它只会在声音完成后触发。

你可以用这种方式排队尽可能多的声音。

于 2011-09-24T10:25:01.040 回答