第一次发出哔哔声后,web-audio api无效

时间:2015-12-26 23:23:40

标签: javascript web-audio

我正在使用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 )

我的问题:为什么我的声音没有播放(在第二个++循环中),最重要的是,修复是什么?

我的例子:http://codepen.io/robwelan/pen/LGRJdE

0 个答案:

没有答案