2

我正在尝试通过嗡嗡声系统开发一个查询,并寻找一种有效的算法来比较嗡嗡声查询的频率与数据库中的频率。似乎动态时间包装将是合适的,因为它可以处理不同的速度(节奏)。

  1. 但是,即使用户用不同的和弦哼唱,这也能用于比较吗?换句话说,以不同的音高哼唱(例如,原始歌曲在和弦 C 中……而用户在和弦 E 中演唱)
  2. 有没有用 c# 编写的示例代码?(找到了一些matlab编码,但不幸的是我不熟悉matlab)。或者至少有一个关于此上下文描述 dtw 的教程?
  3. 如果 DTW 不适合,是否还有其他适合此目的的算法?非常感谢您的建议。提前致谢 :)
4

2 回答 2

0

等律调音(不是人类本身调音,而是作为模型)中,相邻音符(半音)之间的比率是 2 的 12 次根,即 1.0595,因此 12 个半音构成一个八度,每个八度是频率的两倍。无论有人哼出一个曲调的哪个键,您都应该能够通过考虑音符频率的比率来确定他们哼唱的音程。

于 2012-02-23T18:02:56.627 回答
0

1,在DTW比较两首曲子之前最好先标准化音高,我认为这在文学上称为音高转换。

2、不知道有没有C#实现,https://github.com/EmilioMolina/QueryBySingingHumming,这里有一个c/c++的demo代码。

3,DTW是匹配两个时间序列的有效算法,但唯一的问题是计算成本,当我们做一个真实世界的系统时,我们必须找到一种降低成本的方法:a)找到一种方法来做DTW-指数?b) 找到一种更有效但不太准确的算法来缩小 DTW 的搜索范围?

于 2015-09-15T03:43:33.650 回答