单击按钮时停止显示麦克风信号

时间:2018-03-18 18:40:08

标签: javascript

我正在编写一个函数,它接受输入并使用tone.JS框架在屏幕上显示它。

我有一个切换功能可以打开和关闭麦克风。打开麦克风会正确显示数字。但是,关闭开关会产生如下输出:

6.135655369512991e-28,
6.135655369512991e-29,
6.135655369512991e-30,
6.135655369512991e-31,
等等。

当切换开关关闭时,如何将功能重置为0(完全停止)? 我还想在切换选中时停止记录控制台,因为' false' (关闭)。我怎么做到这一点?

麦克风切换功能如下所示 -

function micToggle() {
    if (micSwitch.checked === true) {
        mic.open();
    }
    else {
        mic.close();
        }
}

电平表(输出)的功能如下所示 -

function drawMeter() {

    var level = meter.getLevel();
    // var absoluteLevel = Math.abs(level);
    level = Tone.dbToGain(level);

    // meterContext.clearRect(0, 0, canvasWidth, canvasHeight);
    // meterContext.fillStyle = meterGraident;
    // meterContext.fillRect(0, 0, canvasWidth, canvasHeight);
    // meterContext.fillStyle = "white";
    // meterContext.fillRect(canvasWidth * level, 0, canvasWidth, canvasHeight);

    console.log(level);

    decibelMeter.innerText = level;
}
    window.setInterval(drawMeter, 700);

1 个答案:

答案 0 :(得分:0)

一个简单的解决方法是使用全局布尔值,当麦克风切换为打开时将其设置为true,而当切换为关闭时将其设置为false。

然而,这仍然会经常显示分贝水平。你真正想要的是每次麦克风打开时设置间隔,然后每次切换到关闭时清除它。

您的代码可能会被修改为如下所示:

var interval;
function micToggle() {
    if (micSwitch.checked === true) {
        mic.open();
        interval = window.setInterval(drawMeter, 700);
    }
    else {
        mic.close();
        mic.dispose(); // to do cleanup
        window.clearInterval(interval);
    }
}

下面没有setInterval()功能的代码现在看起来像:

function drawMeter() {

var level = meter.getLevel();
// var absoluteLevel = Math.abs(level);
level = Tone.dbToGain(level);

// meterContext.clearRect(0, 0, canvasWidth, canvasHeight);
// meterContext.fillStyle = meterGraident;
// meterContext.fillRect(0, 0, canvasWidth, canvasHeight);
// meterContext.fillStyle = "white";
// meterContext.fillRect(canvasWidth * level, 0, canvasWidth, canvasHeight);


console.log(level);

decibelMeter.innerText = level;
}

希望这有帮助!