如何构建一个程序,让您在聆听歌曲的同时快速掌握歌曲的和弦?

信息处理 fft 音乐
2022-01-05 11:56:59

我试图思考如何编写一个可以即时识别和弦的软件。由于我对音乐一无所知,我可以假设和弦是正交且独特的吗?我想我可以,因为它是不同频率的正弦信号的线性组合。

a. What is the rate I have to sample the song? 

b. Are the chords unique?

c. Can I assume I can store and have all the chords? Is it a finite set?

我找到了这个问题,但它没有回答我的问题

4个回答

一种。采样歌曲的费率是多少?

和弦通常由 f0 在 100 - 1kHz 范围内的乐器演奏,因此如果您的算法只能处理每个音符的基音,那么 2kHz 的采样率就足够了。你不能再低了。对于这样的识别任务,绝对没有高于 16kHz 的点采样;几乎所有关于和弦和键检测的文献都使用此采样率或更低(Mauch,Papadopoulos:11kHz。Ellis,Harte:16kHz)。请记住,大部分成年人已经失去了他们的“最高八度音阶”,并且无法听到超过 10kHz 的声音;这并不能阻止年长的音乐家轻松区分和弦!

湾。和弦是独一无二的吗?C。我可以假设我可以存储并拥有所有和弦吗?它是有限集吗?

不知道你在这里的意思;但可以演奏相同的和弦(比如 C):

  • 在不同的八度,
  • 在各种反转(C、E、G;或 E、G、C;或 G、C、E...)时,
  • 各种乐器音色的组合,
  • 有或没有背景鼓,有或没有歌声,
  • 在录制、混音、母带制作和 mp3 压缩过程中应用各种音频转换。

这意味着“C”和弦的可观察信号非常广泛。

如果您想研究自动和弦检测,请阅读Matthias Mauch 的出版物,他的论文提供了关于该主题的最完整的工作主体。为了让您了解任务的复杂程度,他的“基线”算法包括:

  • 使用相当大的窗口(在数百毫秒范围内)提取信号的 STFT。
  • 通过上采样和投影将其映射到常数 Q 表示。
  • 对恒定 Q 谱图应用几个对比度增强和白化操作,以补偿“水平”衰减(当演奏音符时,其幅度随时间衰减)和“垂直”衰减(音乐声的频谱随着频率的增加而减少能量增加)
  • 使用非负最小二乘法将恒定 Q 谱图的每个切片描述为少量正加权谐波梳的总和。
  • 将提取的梳子的 f0 转换为 12 色阶(所谓的“色度向量”)。
  • 将色度向量与数百个与和弦相对应的手动定义模板的字典相匹配。
  • 使用 HMM 模型来平滑检测到的和弦序列。

最新一点很重要:他的方法(据说是最先进的)不是因果关系,所以它不能“即时”工作。此外,NNLS 分解所需的处理时间和非常大的 FFT 窗口使其运行速度比实时慢 3 倍。Beatles 作品的 75% 准确率。只是为了让您意识到获得可靠和实时的东西将是一项非常艰巨的任务!如果您正在寻找更简单的东西,您可以从阅读Laurent Oudre的这篇论文的第二部分开始。

快速解答

  • 一种。至少 32 kHz
  • 湾。
  • C。有限但很大。1000 秒。如果您考虑倒置和“过度”符号,则有数十个 1000。

这实际上是一个非常困难的问题。和弦由单个音符组成。然而,这些音符具有基本和谐波。它们不是纯正弦曲线。假设您在吉他上弹奏 C7/#9 和弦(C 七升九),该吉他通常使用四根弦演奏为 CE Bb Eb。四个琴弦中的每一个都产生其基本和许多谐波。由于每个音符通​​常会得到 6-10 个重要的谐波,因此频谱非常复杂。

即使您可以可靠地提取音符,和弦检测也很棘手。和弦当然不是唯一的。例如 C6(C 六)和 am7(A 小调 7)的音符基本相同。C_dim、Eb_dim、F#_dim、A_dim 也是如此。此外,音符的叠加很重要(所谓的反转),即哪个音符最高,哪个音符最低。在许多情况下,它还取决于音乐背景。根据之前发生的事情和之后发生的事情,一组特定的音符会形成不同的和弦。

和弦符号不是超级科学的。每个键都有几十种不同的和弦味道,人们用不同的方式转录它们。还有一整套使用“over”符号的和弦风格。例如,B7+/C 的意思是“在 C 根音上演奏降 B 大调七和弦 (Bb DFA)”。如果您有兴趣听听这听起来如何:这实际上是这首歌前 15 秒使用的和弦http://www.youtube.com/watch?v=V7dg8vRDM68

您的问题描述的第一个问题是“歌曲”中每个和弦中的每个音符不仅仅是音符音高频率的正弦波或正弦波,而是一个更复杂,可能随时间变化,可能只是伪周期波形,可能由几十个泛音组成。然后,您将未知数量的这些谐波丰富的波形混合在一起形成每个和弦。然后任何延音踏板或效果器可能会重叠并混合连续的和弦声音。这些结合起来使搜索空间比可能的和弦表大许多数量级(除非您坚持使用极其受限的电子合成器作为唯一的乐器)。

我意识到,当你在乐器的音高范围内上下移动时,试图解释不断变化的音色包络会使事情变得过于复杂而无法开始。我说的是演奏一个作为大和弦根音的音符。您将根的频率乘以两个常数,得到第三个和第五个。您将使用您能找到的最简单的 DSP 芯片,因为它只是一个 concatenate(root,third,fifth) 命令来创建一个大和弦。会有一个夹式麦克风来听到音符,还有一个扬声器来播放产生的大和弦。还有一个转牌罐(名义上是10kΩ输入阻抗),中心抽头连接到 DSP 的输入线,这样您就可以控制音量而不会淹没频段的其余部分。

对我来说唯一的问题是是否使用今天的等律音阶或过去的音阶来使数学更简单地确定第三和第五的频率。传统上,大和弦的音符形成 4:5:6 的比例。第三个频率 = 5/4根的频率。五度的频率 = 3/2根的频率。

在等律音阶中,音高的最小单位,半音,是一个乘数,212=2112,2 的第十二根,从一个音符到下一个更高的音高。(212)12=2,这意味着在 2 的十二次方根的 12 次乘法之后,你得到 2。频率加倍意味着你已经上升了一个八度。第三个是2412=213=23或 2 的立方根根的频率。第五个是2312=214=24或 2 的第四个根第三个频率。

我会选择第一个选择,因为这是人耳所适应的,也是你的乐器在产生谐波方面实际演奏的事实。这种方法对于音高较高的一个音符时间乐器最有意义。完全披露,我还没有制造过这样的设备,也没有为我的生活中的 DSP 芯片编写任何代码。这是一个值得尝试的思想实验,因为我们谈论的零件最多为 5-10 美元。这个想法是,这可以帮助学校乐队或任何其他新乐队立即听起来更好,并让他们对演奏音乐感兴趣。我会免费赠送它们。当音乐家变得更好时,他或她可以拨低连接在转盘上的增益旋钮。我要自己做一些,只要我能拿到必要的零件,说起来容易做起来难。如果我错了,这将是一个非常值得尝试的实验,因此我欢迎你无情的鞭打。下次我将使用 MathJax。(现在是当地时间凌晨 2 点,因为我在这里结束了,我想在黎明前睡几个小时〜早上 7 点 15 分。)