我正在编写一个函数,它接受输入并使用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);
答案 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;
}
希望这有帮助!