Il comportamento che sto per descrivere accade in Chrome 44, ma che non accadere in Firefox 40.Web inaspettatamente scivolano da una frequenza all'altra in Chrome
Se si crea un oscillatore, impostarlo ad una frequenza di 220 Hz, e quindi modificare la frequenza a 440 Hz un secondo dopo, si può sentire un effetto di portamento distinto: invece di cambiare istantaneamente da 220 a 440, l'oscillatore scivola dalla frequenza originale a quella nuova.
Il codice di seguito illustra questo fenomeno:
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);
Ho esaminato la documentazione per l'oggetto OscillatorNode, e non c'è alcuna menzione di questo comportamento.
Ho anche setacciato Google e (sorprendentemente) non riesco a trovare altre menzioni di questo fenomeno.
Cosa sta succedendo? Questo non sembra un comportamento corretto. Se volessi che la frequenza fosse planata, userei il metodo linearRampToValueAtTime(). Impostare la frequenza direttamente su un valore specifico dovrebbe solo ... farlo.
È solo un errore? So che questa API è ancora in flusso, ma questo sembra abbastanza evidente per essere un bug - questo non avrebbe superato il test più superficiale. Ma non riesco nemmeno ad immaginare che Google la implementerebbe in questo modo deliberatamente.
Soprattutto: c'è una soluzione?
Funziona "correttamente" in Firefox, questo è un problema di webkit, quindi funziona anche con Opera e Safari. –