getByteTimeDomain/FrequencyData() 方法如何工作
how do getByteTimeDomain/FrequencyData() method work
我正在尝试使用 JavaScript 网络音频 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() returns 非常明显,易于访问的数据。相反,getByteFrequencyData() save/represent/mean 的参数 "buffer" 是什么意思?它如何表示音频数据?我怎样才能 manipulate/handle 它并使用这些方法开发我自己的程序?
谢谢。
getByteFrequencyData 的规范条目准确地告诉了您它是什么。分析器节点确定一组箱中的频率内容,其中每个箱的值是该频率分量的幅度。 getByteFrequencyData
只是转换该 dB,然后将值缩放到 0 到 255 的范围内。
我通常建议人们首先使用 getFloatFrequencyData()
,因为我认为它更容易理解,而无需处理缩放。
我正在尝试使用 JavaScript 网络音频 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() returns 非常明显,易于访问的数据。相反,getByteFrequencyData() save/represent/mean 的参数 "buffer" 是什么意思?它如何表示音频数据?我怎样才能 manipulate/handle 它并使用这些方法开发我自己的程序?
谢谢。
getByteFrequencyData 的规范条目准确地告诉了您它是什么。分析器节点确定一组箱中的频率内容,其中每个箱的值是该频率分量的幅度。 getByteFrequencyData
只是转换该 dB,然后将值缩放到 0 到 255 的范围内。
我通常建议人们首先使用 getFloatFrequencyData()
,因为我认为它更容易理解,而无需处理缩放。