我正在使用JavaScript构建一个简单的可扩展节拍器类,其灵感来自"两个时钟的故事"在这里:http://www.html5rocks.com/en/tutorials/audio/scheduling/。
我已经将原始代码转换为类,遵循与原始代码相同的基本模式,并且我还包含了一些额外的部分。代码工作得很好,除了一个巨大的问题,即振荡器在播放第一个声音后不会触发(在我的代码版本中)。如果我在" scheduleNote"中包含警报,则声音效果很好。
this.scheduleNote = function( beatNumber ) {
if (( this.noteResolution == 1 ) && ( beatNumber % 2 )) {
return; // we're not playing non-8th 16th notes
}
if (( this.noteResolution == 2 ) && ( beatNumber % 4 )) {
return; // we're not playing non-quarter 8th notes
}
var oscillator = myAC.audioContext.createOscillator(); // Create sound source
var gainNode = myAC.audioContext.createGain(); // Create gain node
oscillator.type = "square"; // Square wave
oscillator.frequency.value = this.frequency; // Frequency in hertz
oscillator.connect(gainNode); // Connect sound source 2 to gain node 2
gainNode.connect(myAC.audioContext.destination); // Connect gain node 2 to output
gainNode.gain.value = 1; // Set volume to 100 percent
oscillator.start(myAC.audioContext.currentTime);
oscillator.stop(myAC.audioContext.currentTime + this.noteLength);
// alert("un-comment this: suddenly the sound works perfectly...");
oscillator = null;
} // this.scheduleNote( beatNumber )
我的问题:为什么我的声音没有播放(在第二个++循环中),最重要的是,修复是什么?