我正在用 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) 忽略任何超出您所需频率的频率档。可以通过将箱索引乘以箱总数的采样率的 1/2 来找到箱起始频率。例如,对于 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
确定采样率
关于Javascript Audio - createAnalyser 选择频率范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29576431/