【发布时间】:2010-06-09 11:42:34
【问题描述】:
我需要比较 2 组音乐作品(即以 MIDI 格式录制的演奏 - 提取并保存在数据库表中的音符细节,与以 XML 格式录制的乐谱)。在评估弹奏乐谱时(即音符细节——音高、持续时间、节奏),需要进行音符对齐 - 以识别参考(乐谱)音符中遗漏/额外/不正确/交换的音符。
我大约有 1800-2500 个音符(甚至可以更多 - 与复音,现在我正在为单音做)。那么我是否必须将所有这些都放入一个数组中?会是内存过载还是堆栈溢出?
有 KMP、Boyce-Moore 等字符串匹配算法。但是音符对齐也可以通过动态编程来完成。我如何使用动态编程来解决这个问题?有哪些可用的算法?是关于近似字符串匹配吗?
哪种方法效率高?像 Boyce-Moore 这样的字符串匹配算法,还是动态编程?如何评估哪个更有效?
非常感谢任何见解或建议 提前致谢
【问题讨论】:
-
嗨,比玛。啊,好吧-我在这里仍然不是很有经验的用户,正在努力-我会尽力而为。我提出的许多问题并不是可以直接给出答案的问题——我认为,但我确实赞成。 :( 如果您对我的问题有任何想法 - 请发表您的意见 - 非常感谢您抽出宝贵的时间。
-
为了更清楚一点,也许您可以解释一下音符对齐的确切含义。我们这里的大多数人对计算机的了解比对音乐的了解还要多。
-
感谢您指出佩斯。我所说的注意对齐的意思是这个。我需要将玩家的演奏(即演奏的音符)与乐谱中的音符进行比较,包括音高、持续时间、节奏和开始信息。如果我只是逐个音符进行比较,假设学生演奏者 1. 滑了一个音符(丢失/删除),或 2. 演奏了一个额外的音符(添加)/或 3. 演奏了错误的音符(不正确/不匹配) - > 这些将不会被识别。所以我需要将学生演奏的音符(我有从 MIDI 提取的音符细节)与实际(乐谱)对齐,以便比较/评估。是不是更清楚了?
-
如果需要进一步解释问题,请告诉我。非常感谢您关心佩斯。提前谢谢
-
好像是最长递增子序列的应用。
标签: algorithm dynamic evaluation string-matching