有没有一种已知的算法可以用匹配的仪表识别歌词和音乐



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

  • 任何模仿歌曲都将是符合原曲调的新歌词;看Weird Al的大部分歌曲
  • 基督教教堂的赞美诗经常有几种曲调可以放在同一首歌词中

尽管在理论上,任何单词都可以按照任意曲调演唱,但大多数组合都会非常尴尬。一个有良好计量感的人可以很容易地识别好的或坏的匹配。一个程序也应该能够做到这一点。

例如,想象一下《星条旗》中的以下几行:

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

是否有已知的算法可以通过匹配的仪表识别歌词和音乐

这实际上是我多年前在最后一年的学位项目中看到的一个问题。在古老的英国民歌中也有类似的现象——有大量的"Broadside Ballads",通常写在最前面的"To be sung To the tune of Packington’s Pound"(或其他一些著名的曲调)。这就是新闻的传播方式,民谣歌手在公共场所唱歌。因此,为少数曲调设置了许多单词集。在我的项目中,我考虑创建一种算法来分析一段文字,并在数据库中找到可以演唱的曲调。

当时我找不到任何以前的研究可以回答这个问题。它甚至没有名字,所以我们称之为"反事实分析"(我理解"反制造"的意思是"用不同的曲调唱单词")。

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

,你能看到黎明的耳朵

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

如果喜欢它,那么你应该-一个在它上面放一个

这听起来完全不对。在韵律方面,我认为这是一种指法重音模式:(de)-DER de de DER de DER de de DER。

因此,如果你能写出一个具有相同韵律结构的句子,那么你就有可能按照的原调演唱

嗨,乔治,你能站在那里吗

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

这应该能让你对这个问题有一点了解。我会设法找到我写在上面的报告,并在这里更新。

更新:我终于成功地将古老的WordPerfect文件转换为pdf

在python中,您可以使用自然语言工具包(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

查看nltkhttps://sites.google.com/site/naturallanguagetoolkit/book

我给出的例子的一个更详细的版本在第2章

最新更新