html - 调谐器的网络音频音调检测

标签 html audio frequency

所以我一直在使用 Web Audio API 制作一个简单的 HTML5 调谐器。我已将其全部设置为响应正确的频率,问题似乎在于获取实际频率。使用输入,我创建一个频谱数组,在其中查找最高值并将该频率用作输入调谐器的频率。问题是,在 Web Audio 中创建分析器时,它不能变得比 FFT 值 2048 更具体。使用此功能时,如果我播放 440hz 音符,数组中最接近的音符类似于 430hz,下一个值似乎是高于 440。因此调音器会认为我正在演奏这些音符,而事实上最大的频率应该是 440hz 而不是 430hz。由于分析仪阵列中不存在该频率,因此我正在尝试找出解决此问题的方法,或者我是否遗漏了一些非常明显的东西。

我对此很陌生,因此非常感谢任何帮助。

谢谢

最佳答案

有多种方法可以实现基音检测。这个paper提供对它们的评论。他们的结论是,使用 FFT 可能不是最好的方法 - 然而,目前还不清楚他们基于 FFT 的算法实际上做了什么。

如果您只是将吉他弦调至固定频率,则存在更简单的方法。构建一个不知道预期频率的全半音调音器是很困难的。

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

首先,您使用短定时器 FFT (STFT) 解决分辨率问题 - 或者更准确地说 - 一系列解决方案。该过程描述得很好in this article

如果您打算为吉他和贝斯吉他构建一个调音器(让我们面对现实,这里提出问题的每个人都是),您至少需要一个带有重叠窗口的 4092 点 DFT,以免违反奈奎斯特定律底部 E1 字符串的速率约为 41Hz。

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

关于html - 调谐器的网络音频音调检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24460607/

相关文章:

javascript - 边框布局代码中断,无法看到内容

jquery - 使用 jQuery 将页面加载到 div 元素中并删除当前加载的页面

html - <img> 不需要的照片旋转

android - Android 播放、暂停/停止和设置音频音量的相对延迟

python - 分析和取消wave文件的常用频率

C# 频率检索

javascript - 使用 JavaScript 在 HTML 中查找输入

python - 查找单词的频率并绘制结果

r - 附加频率表 - 带有缺失值

android - 如何使用 MediaMuxer 合并音频和视频?