【问题标题】:Comparing pitches with digital audio将音高与数字音频进行比较
【发布时间】:2013-11-14 06:56:40
【问题描述】:

我正在开发将音符与数字音频进行比较的应用程序。我的第一个想法是使用一些复音音高算法分析 wav 文件(或实时声音),并从该文件中获取音符和和弦,然后与数据集中的音符进行比较。我浏览了很多页面,这似乎是一项艰巨的工作,因为现有的实现和算法主要/仅关注单声道声音。

现在,我想到了以相反的方式执行此操作。在数据集中,我有例如注释:A4 或更好的示例和弦:A4 B4 H4。我的想法是从这个音符或和弦中产生一些波浪(或任何我不知道的东西),然后与一段数字音频进行比较。

这是个好主意吗?它是更好/更难的解决方案吗? 如果是,你能推荐我怎么做吗?

【问题讨论】:

  • H4 是什么注释?你的工作规模是多少?我的去CDEFGABC...所以H 不会发生?
  • 你所说的“与一段数字音频相比”是什么意思?在我看来,找到音符的方法是进行傅里叶变换并挑选出峰值。当然,您必须了解(并且基本上忽略)谐波和“拍”频率,这可能需要一些“艺术”。
  • sorry H 是我的错误,只是和弦(多音),,,,“与一段数字音频相比”,我不会从音乐中检索信息,而只会comapred。

标签: signal-processing pitch


【解决方案1】:

最简单的解决方案是对波形进行 FFT(快速傅立叶变换):所有音符(及其谐波)都将出现在信号中。然后,您可以查找与音符对应的频率,这就是您的解决方案。

注意 - 为了获得不错的频率分辨率,您需要足够长的采样和足够高的采样率。但是试试看,你会看到的。

以下是我坐在钢琴前拍摄的名为 SpectraWave 的应用程序的几张屏幕截图。第一个是中间 A(如你所知,f = 440 Hz):

第二个是 A 小和弦(如您所见,我的中指稍强一些,C 显示为音量最大的音符)。谐波很快就会让人很难看到不仅仅是几个音符……

【讨论】:

  • 所以,如果我知道和弦中的音符及其频率,例如(Cm:C,E♭,G),并且我在播放歌曲中预期的信号中找到这些频率,我有解决方案?
  • 您已经有了“解决方案的开端”。正确地做到这一点真的很难——人们在这个问题上花了很多年。看看你用上面的方法能走多远——样本长度和采样率至关重要,“子箱估计”也是如此(实际频率很可能在箱之间,所以你必须插值)。玩得开心!
  • 我认为这个过程是多么容易。假设我们也知道音符的频率和音符的持续时间。我们将只使用一架乐器钢琴。这个限制能缓解吗?
  • 长音符比短音符更容易检测;并且保持在一个八度以内也会有很大帮助。请记住,在中间八度音程中,二分音符仅间隔几赫兹:中音 C = 261.6 Hz,C# = 277.2 Hz。差异仅为 15 Hz - 您需要至少 1/15 秒的数据才能区分它们。较低的音符更难,因为差异更小。我的建议 - 尝试一些东西,看看它对你有用。开始后发布更新和更多问题。
  • 好的,谢谢,你能推荐我一些出版物或在谷歌搜索什么吗?因为我不知道这个问题是如何被调用的。
【解决方案2】:

您的“解决方案”很可能使匹配变得更加困难,因为您不知道要为每个音符制作什么波形。大多数乐器和声音不仅产生与单个正弦波或任何其他熟悉波形显着不同的波形,而且这些波形随着时间的推移而演变。从而猜对了 用于匹配的每个音符的波形是极不可能的。

【讨论】:

  • 那么一种乐器呢,例如钢琴?
猜你喜欢
  • 1970-01-01
  • 2016-03-19
  • 1970-01-01
  • 2011-08-03
  • 2010-12-19
  • 1970-01-01
  • 2015-08-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多