我前几天询问过这个问题,但没有包含足够的代码。我基本上在 JavaScript 中收到NaN错误,我的麦克风输入信号显示在-36和'NaN'之间。我明白这意味着'不是一个数字',但我不知道如何解决它。下面我在 Tone.js 框架中添加了我的代码和'getValue'函数中的代码。
我的代码:
function checkLevel() {
var linearLevel = levelMeter.getValue();
var minLeveldB = Tone.gainToDb(0.0000761);
var maxLeveldB = Tone.gainToDb(0.0157895);
var leveldB = Tone.gainToDb(linearLevel);
var absoluteLevel = Math.abs(leveldB);
if (leveldB < minLeveldB) {
leveldB = minLeveldB;
}
if (leveldB > maxLeveldB) {
leveldB = maxLeveldB;
}
var n = leveldB.toFixed(0); // Rounds input signal down to 0 decimal places
if (ISMICOPEN) {
console.log(n); // Logs the rounded number to the console
}
decibelMeter.innerText = n; // Displays the input on the screen
}
window.setInterval(checkLevel, 700);
其中levelMeter是新的Tone.js仪表实例,decibelMeter是HTML中用于显示信号的范围。
Tone.js getValue()代码:
/**
* Get the signal value of the incoming signal
* @returns {Number}
*/
Tone.Meter.prototype.getValue = function () {
this._analyser.type = 'waveform';
var value = this._analyser.getValue();
return value[0];
};
谢谢!