从音频样本中识别单个吉他和弦



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

作为同一应用程序的一部分,我已经在为吉他调谐器使用FFT和谐波积谱,我真的很想得到一些关于如何分析FFT输出的频谱以识别吉他和弦的建议。我也愿意接受关于此事的任何其他建议,并非常感谢我能得到的任何帮助。

感谢

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

对于想知道如何做这类事情的人,请查看谐波乘积频谱和音调类轮廓/色度矢量。这些因素的结合才是关键。此外,使用搜索术语"多重F0估计"而不是"和弦检测"将保证更好的结果:)

虽然现在回复已经太晚了,但我希望这能对你有所帮助。。

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

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

最新更新