我打算推出一款移动吉他调音器应用。我做了一个初步的研究,发现了一些常用的音调检测方法,如快速傅里叶变换,自相关等。
我还发现FFT不是检测频率的非常好的机制。 由于该项目中有2个部分正在检测吉他弦的频率并将该频率与弦应该在的频率相匹配,我想到使用已经实现的类库来检测弦的频率。
我目前不知道这个项目有多难,所以我的问题是项目的哪个部分更难?它是匹配2个频率还是检测字符串的频率?还有一种方法可以使用FFT但同时获得字符串的准确频率。
感谢您的时间。
答案 0 :(得分:3)
TarsosDSP项目是一个Java音频处理库,包含几种基音检测算法。您可以使用提供的pitch detection example测试它们,看看哪种方法最适合您的情况。源代码可以在TarsosDSP github page
上找到
该库是开源的,可在Android上使用。我认为这是适合您的应用程序。
要将频率与目标频率相匹配,我会将两者转换为绝对分数(或MIDI分数)。 100美分等于半音。然后,您可以向上舍入到最接近的100以获得假定的目标音调。请参阅此页面至convert frequencies in hertz to cents
答案 1 :(得分:0)
有许多图书馆可以帮助您实现这一目标。
手机麦克风应该能够检测到您想要的可听频谱
检测频率是第一部分,FFT应该能够做到这一点
将频率转移到音高是您必须考虑的事情
匹配频率只是第二部分
这是一个好的开始:
Frequency detection and pitch tracking in java
FFTW是西方最快的傅里叶变换,并且有一些Java包装器: