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