吉他和弦识别算法?
什么是适合吉他和弦的数字信号处理算法?由于快速傅里叶变换,我认为仅对吉他上演奏的单个音符准确,但对同时演奏的音符(即和弦)不准确。
谢谢!
Whats a good digital signal processing algorithm that is good on guitar chords? Since Fast Fourier Transform I think only is accurate on single notes played on the guitar but not notes that are played simultaenously (i.e. chords).
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
简而言之,您需要的不仅仅是一种算法。好的和弦识别方法可以更恰当地描述为“系统”,但通常它们确实基于频域的初始变换(最常见的是 DFT)。
如果您想要与此类似的歌曲的和弦表示
,那么这实际上是一个与识别音频片段中的音符稍微相关的问题。事实上,有两个问题(粗略地说):
事实证明,从时域(普通音频)转换到频域(频谱表示)的方式的重要性有限。之后做什么非常重要,并且通常使用复杂的概率模型(类似于语音识别中的模型:HMM、DBN,...)来解决这个问题。
尝试使用谷歌学者“和弦转录”、“和弦检测”或“和弦标签”来进行该领域的高级研究。
大多数这些方法使用离散傅立叶变换 (DFT) 来创建初始频谱图。在进一步处理过程中,尽管使用了不同的时间序列平滑技术:隐马尔可夫模型、动态贝叶斯网络、支持向量机 (SVMstruct) 和条件随机场等,但它们往往仅有细微的差别。
最先进的转录器使用自动调音、调性信息、低音音符信息和度量位置信息来改进结果。我的论文(第 2 章)给出了很好的概述。
开源和弦检测算法:
希望这会有所帮助。
The short answer is that you need much more than one algorithm. Good chord recognition methods could more aptly be described as "systems", but usually they are indeed based on an initial transform to the frequency domain (most often DFT).
If you want a chord representaton of the song similar to this
then this is actually a problem that is slightly removed from recognising the notes in a piece of audio. In fact, there are two problems (roughly speaking):
It turns out that the way you transform from the time domain (normal audio) to the frequency domain (spectral representation) is only of limited importance. It's very important what you do afterwards, and often sophisticated probabilistic models (similar to those in speech recognition: HMMs, DBNs, ...) are used to tackle this problem.
Try google scholar "chord transcription", or "chord detection", or "chord labelling" for advanced research in this area.
Most of these approaches use a discrete Fourier transform (DFT) to create the initial spectrogram. During further processing, too, they tend to differ only slightly, though different time-series smoothing techniques have been used: hidden Markov models, dynamic Bayesian networks, support vector machines (SVMstruct), and conditional random fields -- among others.
The most advanced transcribers use automatic tuning, key information, bass note information, and information of the metric position to improve the results. My thesis (Chapter 2) gives a nice overview.
Open source chord detection algorithms:
Hope this helps.
有一些相当成功的工具使用 DFT (FFT),但它们在计算 DFT 后会进行大量处理。
尝试此链接了解当前状态的摘要艺术,或谷歌“Chordino”或“Chordata”以获取开源和弦提取算法。
There are some reasonably successful tools that use the DFT (FFT), but they do lots of processing after calculating the DFT.
Try this link for a summary the current state of the art, or google "Chordino" or "Chordata" for open source chord extraction algorithms.
好吧,您可以尝试另一组频域算法,例如小波。但我不确定这是否能解决您的准确性问题。实际上,我不明白你在 FFT 方面遇到了哪些问题。它始终是和弦的近似值,没有完美的方法来检索这种声音信息。
因此,这取决于您对该频谱所做的分析,对于单个音符,实际上有很多比 FFT 更好的算法,但对于和弦,您很可能必须使用 FFT。
您必须处理的问题是将基音和高音分开,可能有帮助的一件事是只考虑吉他范围内的频率。
如果您只需要处理吉他声音,您应该花一些时间研究吉他的正常频域图,并尝试使用它来提高准确性。
Well, you can try another set of algorithms for frequency-domain, like wavelets. But I am not sure if that will do for your accuracy issue. Actually, I didn’t understand in what way you are having trouble with the FFT. It will always be an approximation of the chord, there is no perfect way to retrieve that kind of information on sound.
So, it depends on the analysis you do on that spectrum, with single notes, there is actually a lot of better algorithms than the FFT, but with chords you will very likely have to work with FFT.
The problem you will have to deal is split the fundamental harmonics from the upper harmonics, one thing that may help is only consider frequencies that are on the guitar range.
If you only have to work with guitar sounds, you should give some time to study the normal frequency-domain graph of the guitar and try to use that to improve you accuracy.
如果您正确设置软件,FFT 可以并且将会为您提供所有单音。 FFT 的全部目的是区分音调,或者如果您是天体物理学家,您想了解恒星发出的光中的各个元素(硫、氢......)。
谐波不是问题,因为它们的“功率”比基频小,例如,C=440hz,但 C=880hz 也是如此,但 880 将是 FFT 结果中较小的尖峰。
The FFT can and will give you all the single tones if you set the software up properly. The whole point of the FFT is to discriminate tones, or if you're an astrophysicist, you want to know the individual elements (sulpher, hydrogen...) that is in the light coming off the star.
Harmonics are not a problem because they have less 'power' than the fundamental frequencey, for example, C=440hz, but C=880hz as well, but 880 will be the smaller spike in the FFT results.
科学家之间有一场竞赛,人们试图分析音乐的不同参数。本次比赛的其中一个部分是和弦识别。该竞赛是公开的,因此任何人都可以参加并展示该领域的成果。 2011 年的结果发布于此处。
我的一个朋友在这个领域取得了很好的成绩(在这次比赛中也是如此)。您可以在他的网页上了解他的方法。
There is a contest between scientist where people try to analyze different parameters of music. One of section of this contest is chord recognition. This contest is public so anyone can participate in it and show the results in this sphere. The results of the 2011 year is published here.
A friend of mine has achieved good results in this sphere (and in this contest too). You can read about his approach on his webpage.