我想发出振荡音符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()不接受时间作为参数,只接受输出索引。解决方案的任何指针?
答案 0 :(得分:2)
启动和停止的“when”参数基于AudioContext.currentTime。零表示“现在” - 当创建AudioContext时,currentTime也从零开始。所以当你说“.start(0); .stop(2);”时第二次,“停止”已经过去了(检查AudioContext.currentTime - 它已经是> 2),所以启动永远不会产生任何影响。
而不是您目前正在做的事情,请执行:
oscillator.start(context.currentTime);
oscillator.stop(context.currentTime+2);