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

时间:2017-02-04 16:55:11

标签: javascript web-audio web-midi

我正在使用WebMIDI控件构建一个简单的合成器。增益节点对振荡器没有影响,它在整个时间内都是满音量。此外,当我弹奏和弦时,频率是正确的,但有一个摆动和尖叫的效果。使用MIDI控制器以及使用控制台启动和停止合成器时会出现问题。

这是我的合成器代码:

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 个答案:

答案 0 :(得分:1)

振荡器是全范围的 - 即[-1,+ 1]。当你将两个信号相加时(例如将它们连接到相同的输出节点 - 它们在[-2,+ 2]的范围内,这将在某些时间进行剪辑。通过值为0.5的增益节点运行它们。并且看看它是否消除了这个问题。(理想情况下,你可以稍微降低增益并通过压缩器/限制器运行它们。)