【发布时间】:2015-06-12 04:09:09
【问题描述】:
我遇到了一个关于 Web Audio API AudioSourceBufferNode 及其 onended 事件的棘手问题。
基本上我想做的是有两个AudioSourceBufferNodes,当另一个完成时触发它们并继续来回播放。我知道一旦您调用 start(),AudioSourceBufferNodes 就已经完成了,并且它们被设计为在此之后进行垃圾收集。所以我试着像这样解决这个问题:
var source1;
var source2;
source1 = getSound(buffer1);
source2 = getSound(buffer2);
source1.start();
source1.onended = function(){
source2 = getSound(buffer2);
source2.start();
}
source2.onended = function(){
source1 = getSound(buffer1);
source1.start();
}
function getSound(buffer){
var src = context.createBufferSource();
src.buffer = buffer;
src.connect(context.destination);
return src;
}
这可能看起来很麻烦,但我有非常具体的理由来做整个来回播放的事情,所以我真的很想弄清楚这一点。无论如何,问题似乎是当我在source1.onended 回调中调用source2.start() 时,source2.onended 在结束时似乎听不到并且永远不会被调用。因此,如果我设法进入 source2.onended 回调,source1.onended 也不会听到新分配的 source1。
所以我想我想知道的是,onended 事件的范围是什么,有没有更好的方法来完成我想要做的事情?
【问题讨论】:
标签: javascript event-handling web-audio-api