计算公式:引用:如何计算音频dB级别?
上代码
此处我以录音三秒为例,检测分贝
js 公式:
avgEnergy : 波形峰值
16位比特率:振幅可以高达32767
const db = 20 * Math.log10(avgEnergy / 32767);
基于npm 【recorder-core】录音框架为例
//必须引入的核心,换成require也是一样的。注意:recorder-core会自动往window下挂载名称为Recorder对象,全局可调用window.Recorder,也许可自行调整相关源码清除全局污染
import RecorderS from "recorder-core";
//需要使用到的音频格式编码引擎的js文件统统加载进来
import "recorder-core/src/engine/wav";
// import "recorder-core/src/engine/wav-engine";
//以上三个也可以合并使用压缩好的recorder.xxx.min.js
//比如 import Recorder from 'recorder-core/recorder.mp3.min' //已包含recorder-core和mp3格式支持
//可选的扩展支持项
import "recorder-core/src/extensions/waveview.js";
开始计算分贝
[可以放在onProcess 回调函数中计算]
let avgEnergy = 0; // 峰值
// 我这里获取的是最新的buffers
buffers[buffers.length -1].forEach(fragment => {
avgEnergy += Math.abs(fragment)
});
// 计算分贝
const db = 20 * Math.log10(avgEnergy / 32767);
// 分贝可能会计算出无穷大或无穷小
if (isFinite(Math.abs(Math.ceil(db)))) {
// 添加数组
that.dBArray.push(Math.abs(Math.ceil(db)));
// 最终可以算出平均分贝值
}
// 三秒后结束录音
if (bufferDuration >= 3000) {
that.RecordingEnd(); // 结束录音
}
此功能仅做参考,有什么问题欢迎留言