Vorrei suonare un accordo con OscillatorNodes:Eseguendo un accordo con OscillatorNodes utilizzando l'API Web Audio
var ac = new (window.AudioContext || window.webkitAudioContext);
// C4, E4, G4
var freqs = [261.63, 329.63, 392.00];
for(var i=0;i<freqs.length;i++) {
var o = ac.createOscillator();
o.frequency.value = freqs[i];
o.connect(ac.destination);
o.noteOn(0);
setTimeout(function() {o.noteOff(0)}, 1000);
}
Ma questo approccio suona come un pasticcio (here's what it sounds like). Se provo la creazione di nuovi AudioContexts per ogni nota dell'accordo, poi suona bene (like this):
// C4, E4, G4
var freqs = [261.63, 329.63, 392.00];
for(var i=0;i<freqs.length;i++) {
var ac = new (window.AudioContext || window.webkitAudioContext);
var o = ac.createOscillator();
o.frequency.value = freqs[i];
o.connect(ac.destination);
o.noteOn(0);
setTimeout(function() {o.noteOff(0)}, 1000);
}
ma ho letto che si suppone solo per avere un'AudioContext. Che cosa sto facendo di sbagliato?
Il il problema è il ciclo e la chiusura con l'uso di 'o' che viene riassegnato ogni passaggio. Inoltre evita del tutto "setTimeout", usa le funzioni che ti vengono date. Vedere la soluzione ** janesconference ** di seguito. – justinjmoses