【问题标题】:Aligning music notes using String matching algorithms or Dynamic Programming使用字符串匹配算法或动态编程对齐音符
【发布时间】: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


【解决方案1】:

有趣的问题 - 我认为 paper 涵盖了您感兴趣的很多内容。他们解决了错误和音乐对齐问题,并使用 DP 作为求解器讨论了他们的结果。他们引入了一种称为“快速近似匹配”的算法,他们声称该算法比 DP 方法更好。

看起来在搜索中使用的主要作者是 Mongeau 和 Sankoff。看来他们的原始论文引发了该领域的大量工作。

整洁的东西。希望这可以帮助。

【讨论】:

  • 谢谢格雷博。我会阅读并联系任何澄清。
  • 我可以找到一些示例源代码的链接来尝试动态编程以进行近似字符串匹配吗?什么是最有效的动态规划算法(如精确字符串匹配算法->boyer-moore)?
  • 感谢 Grembo 您上次发送的链接,这很有用。这是关于本地和全球对齐。局部对齐(例如 Smith-Waterman 算法)更适合我的方法。但也有 Levenshtein 距离来查找编辑距离(即,将文本与模式匹配所需的编辑操作数)。我怎样才能证明一个反对另一个?哪个更好?找到编辑距离后,对齐音符的更好方法是什么?是仅通过数组索引引用还是有其他选择?提前致谢
  • 刚刚遇到了这个应用于主题的有趣想法:citeseerx.ist.psu.edu/viewdoc/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-13
  • 1970-01-01
  • 2013-12-24
  • 2017-02-10
  • 1970-01-01
  • 2016-07-19
  • 2021-11-06
相关资源
最近更新 更多