Javascript 如何在soundmanager2中逐个启动声音

Javascript 如何在soundmanager2中逐个启动声音,javascript,jquery,soundmanager2,Javascript,Jquery,Soundmanager2,如何在soundmanager2中一个接一个地启动声音,我的意思是当第一个声音结束时,第二个声音开始,第二个声音结束时,第三个声音开始等等。中有一个示例说明了如何执行此操作(请参见演示4a)。play方法将对象作为参数。该对象包含一组选项。其中一个选项是onfinish回调函数: soundManager.play('firstSound',{ multiShotEvents: true, onfinish:function() { soundManager.pl

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

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

soundManager.play('firstSound',{
    multiShotEvents: true,
    onfinish:function() {
        soundManager.play('secondSound');
    }
});
multiShotEvents
选项必须设置为
true
,以使
onfinish
事件在每个声音完成时触发。默认情况下,它只会在声音结束后触发


你可以用这种方式把任意多的声音排成一列。

我花了3个小时才弄明白。。但这是:

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

使用递归,唯一的问题可能会出现,当在数组中放置相同的声音两次时(链为无穷大)

除了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 
};

如何处理10首歌曲或2首以上的歌曲?-1如果不遵循DRY原则,则应使用递归队列函数(请参阅for方法)。值得注意的是,它属于
createSound()
demo2Sound._onfinish = function(){ 
  //now this function will override the previous handler 
};