Wenn ich meinen Oszillator starte, stoppe es und starte es dann erneut; Ich erhalte den folgenden Fehler:(Web Audio API) Oscillator-Knotenfehler: kann den Start nicht mehr als einmal aufrufen
Uncaught InvalidStateError: Failed to execute 'start' on 'OscillatorNode': cannot call start more than once.
Offensichtlich konnte ich gain
verwenden, um „Stop“, um das Audio aber das scheint ihm eine schlechte Praxis. Was ist eine effizientere Art den Oszillator zu stoppen und gleichzeitig neu starten zu können?
Code (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);
});
});
Aktuelle Lösung (zum Zeitpunkt der Frage): http://jsfiddle.net/xbqbzgt2/2/
Endlösung: http://jsfiddle.net/xbqbzgt2/3/
Es sieht wie eine Einschränkung der Implementierung aus. Sie können versuchen, einen neuen 'OscillatorNode' auf jedem' start() 'zu erstellen –