Web audio api 在Web Audio API中处理语音输入时,如何利用完整的频谱图分辨率?

Web audio api 在Web Audio API中处理语音输入时,如何利用完整的频谱图分辨率?,web-audio-api,pitch-tracking,Web Audio Api,Pitch Tracking,我正在开发一个在线可视汉语声调助手之类的东西。这涉及到使用。但该算法的性能受到入射谱图分辨率的限制。到目前为止,我一直在使用Analyzer节点,但由于我无法设置audiocontext的采样率,我在频谱图中获得了不必要的最高频率(samplerate/2=约24 kHz,而人类语音仅上升到约3.4 kHz)。因此,如果我的频谱图分辨率为1024(因为web audio api允许的最大fft大小为2048),那么在分析语音输入时,我只利用了动态范围的一小部分 为了解决这个问题,我还尝试使用sc

我正在开发一个在线可视汉语声调助手之类的东西。这涉及到使用。但该算法的性能受到入射谱图分辨率的限制。到目前为止,我一直在使用Analyzer节点,但由于我无法设置audiocontext的采样率,我在频谱图中获得了不必要的最高频率(samplerate/2=约24 kHz,而人类语音仅上升到约3.4 kHz)。因此,如果我的频谱图分辨率为1024(因为web audio api允许的最大fft大小为2048),那么在分析语音输入时,我只利用了动态范围的一小部分


为了解决这个问题,我还尝试使用scriptProcessorNode收集一个缓冲区,我使用中发现的FFT分析该缓冲区以获得更多控制,但这似乎是一种性能比使用Analyzer节点差得多的方法。有人对如何解决这个问题有什么建议吗?有关我的设置的更多信息,请参见。

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

最终,我认为你必须对这一点进行分析。您是只使用您想要的容器来实现FFT更好,还是应该使用具有超高分辨率的AnalyzerNode并扔掉您不需要的东西?答案将在测量中找到


这就是说,即使是一个相当次优的FFT实现,对于单个输入的实时分析也应该足够快。如果你遇到任何表演中的阻碍表现问题,我会有点惊讶。

谢谢,我现在已经做了更多的实验。我现在使用requestanimationframe来设置FFT变换之间的间隔,并且使用第三方javascript DSP方法,通过缓冲、窗口和变换,它很难保持每秒60次的更新。因此,我认为在阅读asm.js和DSP的一般内容时,我将坚持使用analysis节点。但如果能够在音频API本身中更改采样器或使fft大小高于2048,那就太好了。