我不需要可视化,只想获取频率的实际当前数字。但是使用getFloatFrequencyData(freqDomain),我将获得一个数组。我如何才能从实时中获得一个准确变化的频率?因此,在这里我使用freqDomain [1]作为频率值。但是值(value)是错误的。总是大约-100。我认为我们的语气应该是最小的。 250 Hz。有人可以帮我吗?
这是我的代码:
MicrophoneSample.prototype.visualize = function() {
this.canvas.width = this.WIDTH;
this.canvas.height = this.HEIGHT;
var drawContext = this.canvas.getContext('2d');
var freqDomain = new Float32Array(this.analyser.frequencyBinCount);
this.analyser.getFloatFrequencyData(freqDomain);
var f = Math.round(freqDomain[1]);
var text = f + ' Hz';
document.getElementById('frequency').innerHTML = text ;
requestAnimFrame(this.visualize.bind(this));
};
非常感谢!
最佳答案
这种基本技术仅适用于人工信号。它在任何种类的实词音频信号上都会惨遭失败,尤其是对于几乎任何一种依靠空气或弦的振动柱或人类声音的乐器所产生的声音信号而言。
通过使用STFT,您可以通过计算先前FFT中来自bin的每个bin的相位差,来获得比每个bin的中心频率更好的分辨率。这取决于关系
F = dPhi/dt
换句话说,该频率是相位变化率。
但是,您将需要2048点FFT才能在100Hz以下获得良好的分辨率。
关于api - 我想通过Web音频API获取当前频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20494829/