当前位置: 首页 > 工具软件 > 8Bit.js > 使用案例 >

js 利用audio buffers[int16Array]计算分贝

沈冠宇
2023-12-01

计算公式:引用:如何计算音频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(); // 结束录音
}

此功能仅做参考,有什么问题欢迎留言

 类似资料: