Javascript 音频 - createAnalyser Select 频率范围

Javascript Audio - createAnalyser Select frequency range

我正在 javascript 中创建一个音频可视化器,但我找不到将我正在收听的频率从 20Hz 限制到 8K Hz 的解决方案。这是代码示例: 这是初始化函数:

var _context = new AudioContext();
var _analyser = _context.createAnalyser();
_analyser.fftSize = 512;

var _frequencyData = new Uint8Array( _analyser.frequencyBinCount );

这是一个表示频率增益的条形图。但是在图表的一半之后我什么都没有,因为我的声音在 8k Hz 之后没有发出任何声音(我认为)。

如果我对你的问题的理解正确,你希望可视化 FFT,但不希望它显示任何高于 8kHz 的频率。有 2 个选项:

1) 您可以尝试将采样率设置为 16kHz,这将为您提供 8kHz 的音频带宽。我不确定浏览器是否支持这个。详情请参阅 https://github.com/WebAudio/web-audio-api/issues/300

2) 忽略超出所需频率的任何频率仓。可以通过将 bin 索引乘以 bin 总数上的采样率的 1/2 来找到 bin 起始频率。例如,对于 48000 处的 512 点 FFT:

bin 0:   0 * 48000.0/2/512 = 0 Hz
bin 511: 511 * 48000.0/2/512 = 23953.125 Hz

只需一点代数知识,您就可以解出包含任何所需频率的 bin #:

startFreq = binNum * sr/2/numBins

因此:

binNum = startFreq * numBins / (sr/2)

8000 * 512 / (48000/2) = 170.67

因此 8kHz 将出现在 48kHz 的 512 点 FFT 的 _analyzer.getFloatFrequencyData()[170] 中。

您可以根据 _context.sampleRate

确定采样率