2017-02-04 6 views
1

Ich baue einen einfachen Synthesizer mit WebMIDI-Steuerelement. Der Verstärkungsknoten hat keinen Einfluss auf den Oszillator, er hat die gesamte Zeit die volle Lautstärke. Auch wenn ich Akkorde spiele, sind die Frequenzen korrekt, aber es gibt einen wobbelnden und kreischenden Effekt. Die Probleme treten beim Spielen mit meinem MIDI-Controller und beim Starten und Stoppen des Synthesizers mit der Konsole auf.Mehrere Oszillatoren kreischen, Verstärkung hat keine Auswirkungen in WebAudio

Hier ist mein Synthesizer Code:

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); 
    } 
} 

Antwort

1

Oscillators sind Vollsortimenter - das heißt [-1, + 1]. Wenn Sie zwei Signale summieren (zB verbinden Sie sie mit dem gleichen Ausgangsknoten - sie liegen im Bereich von [-2, + 2], was einen Teil der Zeit abschneidet. Führen Sie sie durch einen Verstärkungsknoten mit dem Wert = 0,5 und sehen Sie wenn es das Problem beseitigt. (Idealerweise würden Sie die Verstärkung ein wenig senken und sie durch einen Kompressor/Limiter laufen lassen.)

Verwandte Themen