吉他和弦识别算法?
Posted
技术标签:
【中文标题】吉他和弦识别算法?【英文标题】:Guitar Chord Recognition Algorithm? 【发布时间】:2011-05-01 06:58:51 【问题描述】:有什么好的数字信号处理算法可以很好地处理吉他和弦?由于快速傅里叶变换,我认为只有在吉他上弹奏的单个音符上才准确,而不是同时弹奏的音符(即和弦)。
谢谢!
【问题讨论】:
向 Melodyne 的人提问:youtube.com/watch?v=jFCjv4_jqAY 您认为 FFT 在您的案例中不准确的依据是什么? 【参考方案1】:简短的回答是,您需要的算法远不止一种。好的和弦识别方法可以更恰当地描述为“系统”,但通常它们确实基于到频域的初始变换(最常见的是 DFT)。
如果你想要类似这首歌的和弦表示
C G Am F7 F6 C ...
那么这实际上是一个在识别一段音频中的音符时略微消除的问题。其实有两个问题(粗略地说):
-
随时查找存在哪些音高
随着时间的推移对这些音高进行分组,以便能够将和弦标签分配给时间间隔。
事实证明,从时域(普通音频)转换到频域(频谱表示)的方式的重要性有限。事后做什么非常重要,并且通常使用复杂的概率模型(类似于语音识别中的模型:HMM、DBN 等)来解决这个问题。
尝试使用谷歌学者“和弦转录”,或“和弦检测”,或“和弦标记”进行该领域的高级研究。
这些方法中的大多数使用离散傅里叶变换 (DFT) 来创建初始频谱图。在进一步的处理过程中,它们也往往略有不同,尽管已经使用了不同的时间序列平滑技术:隐马尔可夫模型、动态贝叶斯网络、支持向量机 (SVMstruct) 和条件随机场等。 最先进的转录器使用自动调音、键信息、低音音符信息和公制位置信息来改进结果。我的thesis(第 2 章)提供了一个很好的概述。
开源和弦检测算法:
Chordino http://isophonics.net/nnls-chroma http://clam-project.org/ 的脊索数据 LabROSA 和弦识别http://labrosa.ee.columbia.edu/projects/chords/希望这会有所帮助。
【讨论】:
+1 以获得良好的答案并能够在答案中引用您自己的论文。 我在使用 LabROSA Chord Recognition 时遇到困难,您能指导我如何使用它吗?我使用终端命令 extractFeaturesAndTrain_svm 和 doChordID_svm,但无法识别【参考方案2】:好吧,您可以尝试另一组频域算法,例如小波。但我不确定这是否会解决您的准确性问题。实际上,我不明白您在使用 FFT 时遇到了什么问题。它始终是和弦的近似值,没有完美的方法来检索那种关于声音的信息。
因此,这取决于您对该频谱进行的分析,对于单音符,实际上有很多比 FFT 更好的算法,但对于和弦,您很可能必须使用 FFT。
您必须处理的问题是将基本谐波与高次谐波分开,可能有帮助的一件事是仅考虑吉他范围内的频率。 如果您只需要处理吉他声音,则应该花一些时间研究吉他的正常频域图,并尝试使用它来提高准确性。
【讨论】:
嗨!使用 FFT 时,是否可以使用 bin 的强度来尝试确定组成和弦的音符?因为我认为它们之间会有某种关联。【参考方案3】:有一些相当成功的工具使用 DFT (FFT),但它们在计算 DFT 后会进行大量处理。
尝试this link 了解当前最先进的技术水平,或使用谷歌“Chordino”或“Chordata”了解开源和弦提取算法。
【讨论】:
【参考方案4】:如果您正确设置软件,FFT 可以而且会为您提供所有单音。 FFT 的重点是区分色调,或者如果您是天体物理学家,您想知道来自恒星的光中的单个元素(硫、氢......)。
谐波不是问题,因为它们的“功率”低于基频,例如 C=440hz,但 C=880hz 也是如此,但 880 将是 FFT 结果中较小的尖峰。
【讨论】:
不,这不是真的,如果您尝试绘制 FFT 产生的频谱,例如,对于在小提琴上演奏的 C5 音符,您会发现 C5 的振幅低于 C6。 @YuriyKravets 我认为他的意思是你可以找到根音,因为正如他所说,它将是具有最大“力量”的那个【参考方案5】:科学家之间有一个contest,人们试图分析音乐的不同参数。本次比赛的一个部分是和弦识别。该竞赛是公开的,因此任何人都可以参与并展示该领域的结果。 2011年度成绩公布here。
我的一个朋友在这方面取得了不错的成绩(在这次比赛中也是如此)。您可以在他的webpage 上了解他的方法。
【讨论】:
以上是关于吉他和弦识别算法?的主要内容,如果未能解决你的问题,请参考以下文章