Javascript Web音频Api,设置增益

Javascript Web音频Api,设置增益,javascript,web-audio-api,Javascript,Web Audio Api,我一直在看网络音频API,但无法让音频增益发挥作用。我在这里设置了一把小提琴,因此您可以了解该函数的应用: 我希望在点击事件中动态创建一个音调,但无法使该音调消失。以下是相关代码: var audioCtx = new AudioContext(); var osc = {}; // set up an object for all the oscillators var gainNodes = {}; // set up an object for all the gains var no

我一直在看网络音频API,但无法让音频增益发挥作用。我在这里设置了一把小提琴,因此您可以了解该函数的应用:

我希望在点击事件中动态创建一个音调,但无法使该音调消失。以下是相关代码:

var audioCtx = new AudioContext();
var osc = {};  // set up an object for all the oscillators
var gainNodes = {};  // set up an object for all the gains
var now;
function tone(id,freq) {

    // create osc / set gain / connect osc
    gainNodes.id = audioCtx.createGain();
    osc.id = audioCtx.createOscillator();
    osc.id.connect(audioCtx.destination);

    // set frequency
    osc.id.frequency.value = freq;

    // set gain at 1 and fade to 0 in one second
    gainNodes.id.gain.value = 1.0;
    gainNodes.id.gain.setValueAtTime(0, audioCtx.currentTime + 1);

    // start and connect
    osc.id.start(0);
    osc.id.connect(audioCtx.destination); 
}

关于是否可以这样做有什么想法吗?

在您的代码中,您将振荡器连接到
目的地两次。
而不是连接
振荡器->增益->目的地

gainNodes.id = audioCtx.createGain();
osc.id = audioCtx.createOscillator();
osc.id.connect(gainNodes.id);

// set frequency and gain
osc.id.frequency.value = freq;
gainNodes.id.gain.value = 1.0;
gainNodes.id.gain.setValueAtTime(0, audioCtx.currentTime + 1);

// start and connect
osc.id.start(0);
gainNodes.id.connect(audioCtx.destination);

再次单击互动程序时,需要断开audioCtx.destination的连接

你看到了吗?还包括关于如何使用滑块进行vinculate的代码(注释良好)。
function dismissTone(id,freq) {
    gainNodes.id.gain.value = 0; 
    osc.id.disconnect(audioCtx.destination);
}

    if($(this).hasClass('xx'))
        tone(thisId,thisFreq);
    else
        dismissTone(thisId,thisFreq);