Web Audio Api,设置增益

Web Audio Api, setting the gain

我一直在查看网络音频 API,但无法使音频增益正常工作。我这里设置了一个fiddle,可以理解函数的应用:http://jsfiddle.net/mnu70gy3/

我希望在单击事件时动态创建音调,但无法使该音调淡出。下面是相关代码:

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

是否可以这样做?

在您的代码中,您将振荡器连接到 destination 两次。 而不是连接 oscillator -> gain -> 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。

https://jsfiddle.net/2dyq2ajw/

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