2

我正在开发一种在线视觉中文音调助手之类的东西。这涉及使用HPS 算法进行音高检测。但是该算法的性能受到传入频谱图的分辨率的限制。到目前为止,我一直在使用 Analyzer 节点,但由于我无法设置音频上下文的采样率,因此我得到了不必要的高频率(采样率/2 = 大约 24 kHz,而人类语音仅上升到大约 3.4 kHz)频谱图。因此,如果我的频谱图分辨率为 1024(因为网络音频 api 允许的最大 fft 大小为 2048),我在分析我的语音输入时只使用动态范围的一小部分。

为了解决这个问题,我也一直在尝试使用 scriptProcessorNode 来收集我用DSP.js中的 FFT 分析的缓冲区以获得更多控制,但这似乎是一种与使用分析器相比性能更差的方法-节点。有人对如何解决这个问题有任何建议吗?更多关于我的设置可以在开发博客中看到。

4

1 回答 1

1

您也许可以尝试在 asm.js 中实现 FFT 代码。我怀疑您会在 Chrome 和 Firefox 中看到相当显着的性能改进,因为这正是 asm 真正擅长的事情。

最终,我认为您将不得不对此进行分析。仅使用所需的 bin 自己实现 FFT 更好,还是应该使用具有超高分辨率的 AnalyserNode 并丢弃不需要的东西?答案将在测量中。

话虽如此,即使是非常次优的 FFT 实现对于单个输入的实时分析也应该足够快。如果您遇到任何令人震惊的性能问题,我会感到惊讶。

于 2013-07-30T14:17:57.400 回答