吉他调音的频率检测

3
我计划开发一个移动吉他调音器应用程序。我进行了初步研究,发现一些常用的音高检测方法,如快速傅里叶变换、自相关等。
我还发现FFT不是一个很好的检测频率的机制。由于这个项目有两部分,一是检测吉他弦的频率,二是将该频率与弦应该在的频率匹配,所以我想使用已经实现的类库来检测弦的频率。
目前我不知道这个项目会有多难,所以我的问题是,项目的哪一部分更难?是将两个频率匹配还是检测弦的频率?此外,是否有一种方法可以同时使用FFT并获得准确的弦频率?
谢谢您的时间。

由于硬件规格限制,您将无法获得准确的频率。 - Antoniossss
这不是提问的恰当场所。只有与代码相关的问题才应该在此发布。 - Psypher
@Antoniossss 你的意思是程序将通过麦克风获取输入吗? - Troller
@Ranjith 抱歉,我看到了一个关于频率的问题,与我的问题有些相似。这就是为什么我在这里发布我的问题的原因。 - Troller
尝试在android.stackexchange.com上发布它。 - Psypher
显示剩余2条评论
2个回答

3
TarsosDSP项目是一个Java音频处理库,包含几种音高检测算法。您可以使用提供的音高检测示例来测试它们,并查看哪种在您的情况下效果最好。源代码可在TarsosDSP GitHub页面上找到。 Pitch detection algorithms 该库是开源的,可在Android上使用。我认为它非常适合您的应用程序。
要将频率匹配到目标频率,我会将两者都转换为绝对cent比例尺(或MIDI cent)。100 cents等于半音。然后,您可以四舍五入到最接近的100以获得假定的目标音调。请参阅此页面以将赫兹频率转换为cents

0
  • 有许多库可以帮助您完成这个任务。

  • 手机麦克风应该能够检测到您想要的听觉频谱。

  • 检测频率是第一步,FFT 应该能够做到这一点。

  • 将频率转换为音高是您需要考虑的事情。

  • 匹配频率只是第二步。

以下是一个很好的开始:

Java 中的频率检测和音高跟踪

FFTW 是“最快的傅里叶变换在西方”,并且有一些 Java 封装:

FFT JAVA 库


1
我无法想象这会很困难。 - user3980067
哇,谢谢你提供这个信息。你认为匹配频率不会像检测频率那样困难吗? - Troller
这个主题也没有短缺的问题。 - marko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接