【发布时间】:2015-11-16 16:02:31
【问题描述】:
当我启动振荡器时,停止它,然后再启动它;我收到以下错误:
Uncaught InvalidStateError: Failed to execute 'start' on 'OscillatorNode': cannot call start more than once.
显然我可以使用gain 来“停止”音频,但这让我觉得这是一种糟糕的做法。有什么更有效的方法可以在停止振荡器的同时重新启动它?
代码 (jsfiddle)
var ctx = new AudioContext();
var osc = ctx.createOscillator();
osc.frequency.value = 8000;
osc.connect(ctx.destination);
function startOsc(bool) {
if(bool === undefined) bool = true;
if(bool === true) {
osc.start(ctx.currentTime);
} else {
osc.stop(ctx.currentTime);
}
}
$(document).ready(function() {
$("#start").click(function() {
startOsc();
});
$("#stop").click(function() {
startOsc(false);
});
});
当前解决方案(提问时):http://jsfiddle.net/xbqbzgt2/2/
最终解决方案:http://jsfiddle.net/xbqbzgt2/3/
【问题讨论】:
-
它看起来像是实现的限制..您可以尝试在每个
start()上创建一个新的OscillatorNode
标签: javascript web-audio-api javascript-oscillator