是否有一种已知的算法来识别具有匹配仪表的歌词和音乐?

时间:2012-03-12 12:16:21

标签: algorithm parsing

有时可以互换不同的曲调和歌词。例如:

  • 任何模仿歌曲都将是符合原始曲调的新歌词;看看Weird Al的大部分歌曲
  • 基督教教会中的赞美诗经常有几首曲子可以使用相同的歌词

虽然理论上任何字都可以演唱任何曲调,但大多数组合都会非常尴尬。具有良好米的感觉的人可以容易地识别好的或坏的匹配。程序也应该能够做到这一点。

例如,想象一下“The Star Spangled Banner”中的以下几行:

Oh say, can you see by the dawn's early light 
what so proudly we hailed at the twilight's last gleaming?

以下模仿歌词(我刚刚编写)适用于曲调,因为它们具有相同的音阶:

Oh say, can you see if my keister's on fire?
I suspect I was duped when I bought warming trousers

以下歌词具有不同且不一致的音阶,但对于曲调来说非常不合适:

If you liked it then you shoulda put a ring on it
Don't be mad when you see that he want it

是否有已知的算法来识别具有匹配米的歌词和音乐?

2 个答案:

答案 0 :(得分:8)

这实际上是我多年前为我的最后一年学位项目所看到的一个问题。在古老的英国民歌中也有类似的现象 - 有大量的'宽边歌谣'通常写在顶部'要唱到Packington's Pound'(或其他一些众所周知的曲调)。这就是新闻是由民谣歌手在公共场所演唱的。因此,对于少量曲调,有许多单词。在我的项目中,我着眼于创建一个算法来分析文本的一节,并在数据库中查找可以演唱的曲调。

当时我找不到任何回答这个问题的研究。它甚至没有名字,因此我们将其称为“Contrafactal Analysis”(我理解''反对'意味着'以不同的方式唱出单词')。

我使用的方法使用牛津高级学习词典(CUVOALD)的计算机可用版本进行了初始语法分析阶段(现在已经很老了,但如果你四处寻找,你可能会发现)。这告诉你每个单词的词性(例如动词,名词),以及主要单词重音所在的位置。这很重要,因为通常主要的单词重音与节拍一致。对一些例子的分析表明,名词和动词最常见于节拍,所以在你的例子中:

  

,你能看到 黎明耳朵

试图将这种压力模式强加于你的反例是:

  

如果喜欢它那么你应该 - a 在其上加上响铃

这听起来完全错了。在prosody术语中,我认为这是一种dactylic压力模式:(de)-DER-de-de DER-de-de DER-de-de DER。

所以,如果你能产生一个具有相同韵律结构的句子,那么你很有可能将它演唱成原始曲调

  

乔治你可以站立 Greg - 或者自行车

在实践中,只要主应力发生在同一个地方,你也可以在这里和那里插入额外的音节。我在ML中实现了一些代码。

这应该会给你一些问题的背景知识。我会尝试找到我在其上写的报告,并在此处更新。

更新:我终于设法将古老的WordPerfect文件转换为pdf

答案 1 :(得分:3)

在python中,您可以使用Natural Language ToolKit(NLTK)来获取单词的发音,然后解析单词的压力。这是一个简单的例子,它是nltkbook中的一个解释(paracoding?):

import nltk
words = nltk.corpus.cmudict.entries()
pronunciation_dict = {}
for word, prons in words:
    pronunciation_dict[word] = prons
string = "what so proudly we hailed at the twilight's last gleaming?"
print "".join(["".join([char for char in "".join(pronunciation_dict[word]) if char.isdigit()]) for word in string.split()])

根据使用情况,几个词可能会有不同的压力模式。上面的方法只会采用第一个列出的发音。

您的行的结果将是(通过一点点编辑,以确保只使用字典中的单词):

“哦,说,你能看到黎明的早期光明吗? 11011101101

在暮光之城最后闪闪发光的时候,我们如何自豪地欢呼?“ 1110111012110

https://sites.google.com/site/naturallanguagetoolkit/book

查看nltk.book

我给出的更详细的例子是第2章