网络音频:定时停止后重新创建振荡器

时间:2014-02-19 16:39:54

标签: javascript web-audio

我想发出振荡音符2秒钟。 但是下一次,即使重新创建一个新的振荡器,也没有播放声音:

        oscillator = context.createOscillator();

        oscillator.frequency.value = 440;         
        oscillator.type = oscillator.SINE;        

        oscillator.connect(context.destination);          

        oscillator.start(0);
        oscillator.stop(2);

如果我省略stop(2)而是在函数中使用setTimeout()到oscillator.stop(),它就可以工作。 我已经读过节点应该被断开,但是disconnect()不接受时间作为参数,只接受输出索引。解决方案的任何指针?

1 个答案:

答案 0 :(得分:2)

启动和停止的“when”参数基于AudioContext.currentTime。零表示“现在” - 当创建AudioContext时,currentTime也从零开始。所以当你说“.start(0); .stop(2);”时第二次,“停止”已经过去了(检查AudioContext.currentTime - 它已经是> 2),所以启动永远不会产生任何影响。

而不是您目前正在做的事情,请执行:

    oscillator.start(context.currentTime);
    oscillator.stop(context.currentTime+2);