吉他调音的频率检测

时间:2014-08-26 17:26:49

标签: java android audio frequency frequency-analysis

我打算推出一款移动吉他调音器应用。我做了一个初步的研究,发现了一些常用的音调检测方法,如快速傅里叶变换,自相关等。

我还发现FFT不是检测频率的非常好的机制。 由于该项目中有2个部分正在检测吉他弦的频率并将该频率与弦应该在的频率相匹配,我想到使用已经实现的类库来检测弦的频率。

我目前不知道这个项目有多难,所以我的问题是项目的哪个部分更难?它是匹配2个频率还是检测字符串的频率?还有一种方法可以使用FFT但同时获得字符串的准确频率。

感谢您的时间。

2 个答案:

答案 0 :(得分:3)

TarsosDSP项目是一个Java音频处理库,包含几种基音检测算法。您可以使用提供的pitch detection example测试它们,看看哪种方法最适合您的情况。源代码可以在TarsosDSP github page

上找到

Pitch detection algorithms

该库是开源的,可在Android上使用。我认为这是适合您的应用程序。

要将频率与目标频率相匹配,我会将两者转换为绝对分数(或MIDI分数)。 100美分等于半音。然后,您可以向上舍入到最接近的100以获得假定的目标音调。请参阅此页面至convert frequencies in hertz to cents

答案 1 :(得分:0)

  • 有许多图书馆可以帮助您实现这一目标。

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

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

  • 将频率转移到音高是您必须考虑的事情

  • 匹配频率只是第二部分

这是一个好的开始:

Frequency detection and pitch tracking in java

FFTW是西方最快的傅里叶变换,并且有一些Java包装器:

FFT JAVA library