Das Verhalten ich bin geschieht in Chrome 44, zu beschreiben, aber tut nicht in Firefox passieren 40.Web Audio-Oszillatoren unerwartet von einer Frequenz gleiten zu einem anderen in Chrome
Wenn Sie einen Oszillator erstellen, setzen Sie es zu einer Frequenz von 220 Hz, und ändern Sie dann die Frequenz auf 440 Hz eine Sekunde später, können Sie einen deutlichen Portamento-Effekt hören: statt sofort von 220 auf 440 zu ändern, gleitet der Oszillator von der ursprünglichen Frequenz auf die neue Frequenz.
Der folgende Code veranschaulicht dieses Phänomen:
var ac = new AudioContext();
var osc = ac.createOscillator();
osc.connect(ac.destination);
osc.type = 'sawtooth';
osc.frequency.value = 220;
osc.start(0);
window.setTimeout(function() {
osc.frequency.value = 440;
}, 1000);
window.setTimeout(function() {
osc.stop(0);
}, 2000);
ich die Dokumentation für das OscillatorNode Objekt untersucht haben, und es gibt keine Erwähnung dieses Verhalten.
Ich habe auch Google durchforstet, und (überraschenderweise) kann ich keine anderen Erwähnungen dieses Phänomens finden.
Was ist los? Das scheint kein richtiges Verhalten zu sein. Wenn ich die Frequenz Glide wollte, würde ich die linearRampToValueAtTime() Methode verwenden. Wenn Sie die Frequenz direkt auf einen bestimmten Wert einstellen, sollten Sie dies einfach tun.
Ist das nur ein Fehler? Ich weiß, dass diese API noch im Fluss ist, aber das scheint ziemlich eklatant zu sein - das würde nicht die oberflächlichsten Tests bestehen. Aber ich kann mir auch nicht vorstellen, dass Google es so implementieren würde absichtlich.
Am wichtigsten: Gibt es einen Workaround?
Es funktioniert "richtig" in Firefox, das ist ein Webkit-Problem, also funktioniert das auch mit Opera und Safari. –