多个振荡器尖叫,增益没有影响WebAudio

问题描述:

我正在构建一个简单的合成器与WebMIDI控制。增益节点对振荡器没有影响,整个时间都处于满量程。另外当我弹奏和弦时,频率是正确的,但是存在颤动和尖锐的效果。使用我的MIDI控制器时以及使用控制台启动和停止合成器时存在这些问题。多个振荡器尖叫,增益没有影响WebAudio

这是我的合成器的代码:

var synth = { 
    voices: {}, 

    start: function (note, vol) { 
     this.voices[note] = { 
      gain: audio.createGain(), 
      osc: audio.createOscillator() 
     } 

     this.voices[note].gain.connect(audio.destination); 

     this.voices[note].osc.frequency.value = noteToFreq(note); 
     this.voices[note].osc.connect(this.voices[note].gain); 

     this.voices[note].osc.start(0); 
     this.voices[note].gain.gain.setTargetAtTime(vol, audio.currentTime, 0.5); 
    }, 

    stop: function (note) { 
    this.voices[note].gain.gain.setTargetAtTime(0, audio.currentTime, 2); 
    this.voices[note].osc.stop(audio.currentTime + 2); 
    } 
} 

振荡器是全范围 - 即[-1,+ 1]。当你将两个信号相加时(例如将它们连接到同一个输出节点 - 它们在[-2,+ 2]的范围内,它会在一段时间内截断。通过一个值为0.5的增益节点运行它们,如果它消除了这个问题(理想情况下,你可以将增益降低一点,然后通过压缩器/限制器运行)。