getByteTimeDomain / FrequencyData()方法如何工作

时间:2018-08-03 03:14:25

标签: javascript html5 web-audio

我正在尝试使用JavaScript Web Audio API开发音高检测器。通过谷歌搜索,我知道我们可以按频率感知音高,因此我找到了getByteFrequencyData()方法。但是我不知道如何正确使用它。

example.js

function draw() {
 var img = new Image();
 img.src="foo.jpg";
 img.onload = function() {
     ctx.drawImage(img, 0, 0);
     var imgData=ctx.getImageData(0, 0, canvas.width, canvas.height);
     var raster = imgData.data;
     for (var i=0;i<raster.length;i++) {
          if (i % 4 != 3) {
               raster[i] = 255 - raster[i];
          }
     }
     ctx.putImageData(imgData,0, 0);
 }
}

正如我们在上面看到的,getImageData()返回非常明显的,易于访问的数据。相反,getByteFrequencyData()的参数“缓冲区” 保存/表示/表示什么?它如何表示音频数据?如何使用这些方法操纵/处理它并开发自己的程序?

谢谢。

1 个答案:

答案 0 :(得分:0)

getByteFrequencyData的规范条目会准确告诉您它是什么。分析器节点确定一组仓中的频率含量,其中每个仓的值就是该频率分量的大小。 getByteFrequencyData只会转换该dB,然后将值缩放到0到25​​5的范围。

我通常建议人们首先使用getFloatFrequencyData(),因为我认为无需进行缩放即可更容易理解。