调谐器的Web音频音高检测

ele*_*ant 2 audio html5 frequency

因此,我一直在使用Web Audio API制作一个简单的HTML5调谐器。我已经全部设置为响应正确的频率,问题似乎出在获取实际频率上。使用输入,创建一个频谱数组,在其中寻找最高值,并将该频率用作馈入调谐器的频率。问题是,在Web Audio中创建分析器时,它不能变得比FFT值2048更具体。如果使用此方法播放440hz音符,则数组中最接近的音符类似于430hz,下一个值似乎高于440。因此,调谐器将认为我实际上在演奏这些音符时,最大的频率应该是440hz,而不是430hz。

我对此很陌生,因此任何帮助将不胜感激。

谢谢

mar*_*rko 5

有多种实现音高检测的方法。该论文为他们提供的审查。他们的结论是,使用FFT可能不是最好的方法-但是,目前还不清楚他们基于FFT的算法的实际作用。

如果您只是将吉他弦调至固定频率,则存在更简单的方法。构建不知道预期频率的先验的全色调谐器非常困难。

您正在使用的FFT方法是完全可能的(我已经使用这种方法构建了一个强大的乐器调谐器,许多第三方都将这种方法用于白标)。但是,您需要大量的FFT数据后处理。

首先,您需要使用短计时器FFT(STFT)或更准确地说是一系列的解决方案来解决分辨率问题。该过程是很好的描述在这篇文章中

如果您打算为吉他和贝司吉他制作一个调音器(让我们面对现实,每个问这个问题的人都是),那么您至少需要一个带有重叠窗口的4092点DFT,以免违反音调。底部E1弦的频率约为〜41Hz。

您还有许多其他算法和可用性障碍需要克服。尤其重要的是,感知音高和频谱峰值并不总是相同的。从STFT取得频谱峰值并不可靠(这也是为什么基本自相关方法也被破坏的原因)。