我想用OscillatorNodes發揮和絃OscillatorNodes和絃:播放使用網絡音頻API
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);
}
但是這種做法聽起來像一個爛攤子(here's what it sounds like)。如果我嘗試在和絃每個音符創造新AudioContexts,那麼它聽起來不錯(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);
}
但是我讀了你只應該有一個AudioContext。我究竟做錯了什麼?
的問題是使用'o'的循環和關閉,每次都要重新分配。另外避免使用'setTimeout',使用你給的函數。請參閱下面的** janesconference **解決方案。 – justinjmoses