Javascript 导出Web音频API中的音频强度

Javascript 导出Web音频API中的音频强度,javascript,audio,html5-audio,web-audio-api,Javascript,Audio,Html5 Audio,Web Audio Api,我试图通过网络音频API找到音频瞬间的强度。我在规范中发现的唯一与强度相关的东西是: analyser.minDecibels analyser.maxDecibels 有办法做到这一点吗?如果我理解正确,您需要的数字在声音大时为高,在声音安静时为低。你可以用“声压级”来表示 从Web Audio API获取这个数字非常简单,您已经正确地猜到我们将使用AnalyzerNode来实现这一点。下面是一个示例代码,向您展示了如何执行此操作: var ac = new AudioContext();

我试图通过网络音频API找到音频瞬间的强度。我在规范中发现的唯一与强度相关的东西是:

analyser.minDecibels
analyser.maxDecibels

有办法做到这一点吗?

如果我理解正确,您需要的数字在声音大时为高,在声音安静时为低。你可以用“声压级”来表示

从Web Audio API获取这个数字非常简单,您已经正确地猜到我们将使用AnalyzerNode来实现这一点。下面是一个示例代码,向您展示了如何执行此操作:

var ac = new AudioContext();
/* create the Web Audio graph, let's assume we have sound coming out of the
 * node `source` */
var an = ac.createAnalyser();
source.connect(an);
/* Get an array that will hold our values */
var buffer = new Uint8Array(an.fftSize);

function f() {
  /* note that getFloatTimeDomainData will be available in the near future,
   * if needed. */
  an.getByteTimeDomainData(buffer);
  /* RMS stands for Root Mean Square, basically the root square of the
  * average of the square of each value. */
  var rms = 0;
  for (var i = 0; i < buffer.length; i++) {
    rms += buffer[i] * buffer[i];
  }
  rms /= buffer.length;
  rms = Math.sqrt(rms);
  /* rms now has the value we want. */
  requestAnimationFrame(f);
}

requestAnimationFrame(f);
/* start our hypothetical source. */
source.start(0);
var ac=newaudiocontext();
/*创建Web音频图,让我们假设有声音从
*节点“源”*/
var an=ac.createAnalyzer();
来源.连接(an);
/*获取一个数组,该数组将保存我们的值*/
var buffer=新的Uint8Array(一个.fftSize);
函数f(){
/*请注意,getFloatTimeDomainData将在不久的将来提供,
*如果需要的话*/
an.getByteTimeDomainData(缓冲区);
/*RMS代表均方根,基本上是
*每个值的平方的平均值*/
var-rms=0;
对于(变量i=0;i
如果我理解正确,您需要的数字在声音大时为高,在声音安静时为低。你可以用“声压级”来表示

从Web Audio API获取这个数字非常简单,您已经正确地猜到我们将使用AnalyzerNode来实现这一点。下面是一个示例代码,向您展示了如何执行此操作:

var ac = new AudioContext();
/* create the Web Audio graph, let's assume we have sound coming out of the
 * node `source` */
var an = ac.createAnalyser();
source.connect(an);
/* Get an array that will hold our values */
var buffer = new Uint8Array(an.fftSize);

function f() {
  /* note that getFloatTimeDomainData will be available in the near future,
   * if needed. */
  an.getByteTimeDomainData(buffer);
  /* RMS stands for Root Mean Square, basically the root square of the
  * average of the square of each value. */
  var rms = 0;
  for (var i = 0; i < buffer.length; i++) {
    rms += buffer[i] * buffer[i];
  }
  rms /= buffer.length;
  rms = Math.sqrt(rms);
  /* rms now has the value we want. */
  requestAnimationFrame(f);
}

requestAnimationFrame(f);
/* start our hypothetical source. */
source.start(0);
var ac=newaudiocontext();
/*创建Web音频图,让我们假设有声音从
*节点“源”*/
var an=ac.createAnalyzer();
来源.连接(an);
/*获取一个数组,该数组将保存我们的值*/
var buffer=新的Uint8Array(一个.fftSize);
函数f(){
/*请注意,getFloatTimeDomainData将在不久的将来提供,
*如果需要的话*/
an.getByteTimeDomainData(缓冲区);
/*RMS代表均方根,基本上是
*每个值的平方的平均值*/
var-rms=0;
对于(变量i=0;i
我想感谢您在大约4年后给出了这个答案。 我只是做了一个快速的POC,并让它与下面的代码一起工作。我希望它也能帮助别人

在这个例子中,我从麦克风中获取实时音频,并将结果记录到控制台上——在我的例子中,在chrome开发工具下


强度试验
var ac=新的AudioContext();
var an=ac.createAnalyzer();
var source=“”;
var buffer=新的Uint8Array(一个.fftSize);
var scriptProcessorNode=ac.createScriptProcessor(16384,1,1);
如果(!navigator.getUserMedia)
navigator.getUserMedia=navigator.getUserMedia |
navigator.webkitGetUserMedia | | navigator.mozGetUserMedia |
navigator.msGetUserMedia;
if(navigator.getUserMedia){
navigator.getUserMedia(
{audio:true},
功能(流){
source=ac.createMediaStreamSource(流);
来源.连接(an);
请求动画帧(f);
},
职能(e){
警报(“捕获音频时出错”);
}
);
}
函数f(){
an.getByteTimeDomainData(缓冲区);
var-rms=0;
对于(变量i=0;i
我想感谢您在大约4年后给出了这个答案。 我只是做了一个快速的POC,并让它与下面的代码一起工作。我希望它也能帮助别人

在这个例子中,我从麦克风中获取实时音频,并将结果记录到控制台上——在我的例子中,在chrome开发工具下


强度试验
var ac=新的AudioContext();
var an=ac.createAnalyzer();
var source=“”;
var buffer=新的Uint8Array(一个.fftSize);
var scriptProcessorNode=ac.createScriptProcessor(16384,1,1);
如果(!navigator.getUserMedia)
navigator.getUserMedia=navigator.getUserMedia |
navigator.webkitGetUserMedia | | navigator.mozGetUserMedia |
navigator.msGetUserMedia;
if(navigator.getUserMedia){
navigator.getUserMedia(
{audio:true},
功能(流){
source=ac.createMediaStreamSource(流);
来源.连接(an);
请求动画帧(f);
},
职能(e){
警报(“捕获音频时出错”);
}
);
}
函数f(){
an.getByteTimeDomainData(缓冲区);
var-rms=0;
对于(变量i=0;i