吉他和弦识别algorithm?
什么是一个好的数字信号处理algorithm,吉他和弦是好的? 由于快速傅里叶变换我认为只有在吉他弹奏的单个音符上是准确的,而不是同时弹奏的音符(即和弦)。
谢谢!
简单的答案是,你需要多于一个algorithm。 好的和弦识别方法可以更恰当地描述为“系统”,但通常它们确实是基于对频域的初始变换(通常是DFT)。
如果你想要一个和这个歌曲类似的和弦代表
CG Am F7 F6 C ...
那么这实际上是从识别audio片段中的音符中略微去除的问题。 事实上,有两个问题(粗略地说):
- 找出哪些球场随时出现
- 随着时间的推移将这些音高分组以便能够将和弦标签分配到时间间隔。
事实certificate,从时域(正常audio)到频域(频谱表示)的转换方式只有有限的重要性。 事后处理非常重要,通常使用复杂的概率模型(类似于语音识别中的模型:HMM,DBN,…)来解决这个问题。
尝试谷歌学者“和弦转录”,或“和弦检测”,或“和弦标签”进行该领域的先进研究。
这些方法大多使用离散傅里叶变换(DFT)来创build初始谱图。 在进一步的处理中,它们也往往略有不同,尽pipe使用了不同的时间序列平滑技术:隐马尔可夫模型,dynamic贝叶斯networking,支持向量机(SVMstruct)和条件随机场等。 最先进的转录器使用自动调谐,关键信息,低音信息和度量位置信息来改善结果。 我的论文 (第2章)给出了一个很好的概述。
开源和弦检测algorithm:
- Chordino在http://isophonics.net/nnls-chroma
- Chordata在http://clam-project.org/
- LabROSA和弦识别http://labrosa.ee.columbia.edu/projects/chords/
希望这可以帮助。
那么,你可以尝试另一套频域的algorithm,如小波。 但我不确定这是否会影响您的准确性。 其实,我不明白你在FFT方面有什么问题。 它总是和弦的近似值,没有完美的方法来检索这种声音信息。
所以,这取决于你在这个频谱上做的分析,单个音符实际上有比FFT更好的algorithm,但是和弦你很可能不得不使用FFT。
你将不得不处理的问题是从高次谐波中分出基波谐波,有一点可以帮助的是只考虑在吉他范围内的频率。 如果您只需要使用吉他声音,则应该花点时间研究吉他的正常频域图,并尝试使用它来提高您的精确度。
如果您正确设置了软件,FFT可以并且会给你所有的单音。 FFT的全部内容是区分色调,或者如果你是一个天体物理学家,你想要知道星星中的光线中的单个元素(硫,氢……)。
谐波不是一个问题,因为它们比基本频率有更less的“功率”,例如C = 440hz,C = 880hz,但是880是FFT结果中较小的峰值。
有一些使用DFT(FFT)的相当成功的工具,但是在计算DFT之后,他们做了大量的处理。
尝试使用此链接获取当前技术状态的摘要,或者查找开源和弦提取algorithm的谷歌“Chordino”或“Chordata”。
人们试图分析不同音乐参数的科学家之间有一场比赛 。 这个比赛的一个部分是和弦识别。 这个比赛是公开的,所以任何人都可以参与,并在这个领域显示结果。 2011年的结果在这里公布。
我的一个朋友在这个领域取得了很好的成绩(也在这个比赛中)。 你可以在他的网页上看到他的方法。