我如何在soundmanager2中实现音频的连续播放?也就是说,当第一个音频播放完毕后,第二个音频开始播放,第二个音频播放完毕后,第三个音频开始播放,以此类推。
我如何在soundmanager2中实现音频的连续播放?也就是说,当第一个音频播放完毕后,第二个音频开始播放,第二个音频播放完毕后,第三个音频开始播放,以此类推。
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])
使用递归时,唯一可能出现的问题是在数组中放置相同的声音两次(链可能无限)。
在文档中有一个执行此操作的示例(请参见Demo4a)。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');
}
});
}
});
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
};
createSound()
函数内部。 - user1063287