如何在soundmanager2中声音后启动声音,我的意思是当第一个声音结束时,第二个声音开始,第二个结束第三个开始等等等。
答案 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
};