Javascript Audio - createAnalyser 选择频率范围

标签 javascript audio

我正在用 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/

相关文章:

javascript - 如何使用 Javascript 使用每个元素自己的高度将 margin-bottom 添加到具有类的所有元素?

javascript - 在 IE(7+) 中嵌入音频,使用 javascript 静音和取消静音功能

ios - 通过 iPhone 音频插孔读取数据

javascript - 如何在 javascript 应用程序中播放短音效?

java - 什么是声音控制语言

python - exception_on_overflow参数不起作用? PyAudio的

javascript - 如何使用 html2canvas 上传屏幕截图?

javascript - Facebook FB.ui oauth 在 Canvas 页面上弹出

javascript - 如何使用 ES6 在 javascript 中删除或添加项目到锯齿状数组?

javascript - 从 Three.js 中的 .dae 获取所有节点名称