从音频样本中识别出单独的吉他和弦

时间:2012-02-24 20:07:13

标签: fft detection spectrum guitar music-notation

我意识到这里已经有很多关于和弦检测算法的问题;然而,其中大多数似乎更多地与将歌曲解释为和弦或和弦转录相关。我的问题应该简单得多,因为我只对记录吉他和弦的单个弹奏感兴趣,然后分析它以返回演奏的和弦。并且,如果这被证明太难,那么仅仅能够判断特定和弦是否正确播放就足够了,例如,向用户呈现用于尝试演奏的和弦,并且在弹奏之后,应用程序将告诉他们他们是否演奏了正确的和弦(某种记忆游戏)。我认为第二种选择会更容易,因为应用程序已经知道了期望的和弦。

我已经将吉他调谐器的FFT和谐波产品频谱用作同一应用的一部分,并且非常希望我能如何分析FFT的频谱输出以识别吉他和弦。我也对此事的任何其他建议持开放态度,并且非常感谢我能得到的任何帮助。

由于

4 个答案:

答案 0 :(得分:1)

您可以尝试对最常见的和弦进行指纹识别,然后在指纹集中寻找最接近的匹配标准化频谱。例如将其视为频域中的模式匹配问题。

答案 1 :(得分:0)

对于想知道如何做这种事情的人,请查看谐波产品频谱和音高类配置文件/色度向量。这些的组合是关键。此外,使用搜索术语“多F0估计”而不是“和弦检测”将保证更好的结果:)

答案 2 :(得分:0)

虽然回复太迟了,但我希望这会对你有帮助..

如果您正在为电子或MIDI吉他或任何其他MIDI乐器编程,那么有一个非常有效的Java包JFugue用于这些东西,例如检测和弦音符等等。对于任何乐器而言,这里有更多的功能包。 我建议你看一下Jfugue.org

答案 3 :(得分:0)

我自己发现很难用FFT识别整个和弦。但就我的实验而言,我能够使用FFT作为获得单个声音数据频率的基本算法来制作吉他和弦标识符。 FFT调谐器的问题是它们只检测声音的根音。虽然我的实验证明你可以记录正在播放的琴弦的所有音符,并使用识别的音符来说明正在演奏的和弦。至于现在,我的研究仍然局限于检测主要吉他和弦和一些小和弦如Em和Am进一步研究。