【Python图像特征的音乐序列生成】如何生成旋律?大纲,以及整个项目的全部流程

今天连看三篇论文,不是很细致地看,也没有具体去实现,只是大概明白了一些新思路。这三篇论文,一篇概述了Decoder-Encoder模型,一篇延伸这个模型,首次提出了Attention机制,最后一篇详细阐述了LSTM和GRU的工作机理。读完之后,我对机器翻译这个领域,还有LSTM的应用,有了更深的认识。

言归正传,说一下生成旋律的原理。

在之前的乐理部分,我们知道了和弦级数和走向的问题,有很多和弦组合在一起能发挥良好的作用。这些好的和弦连接在一起的音序就被成为进行。流行音乐的和弦进行倾向于从根和弦开始,最终再回到根和弦上。这样就能制造一段封闭的四小节或八小节的Loop。大多数曲调都使用这样的张力与解决原则。也知道凭经验,能知道常用的和弦是有感情色彩的(http://www.wenkuxiazai.com/doc/614fe01b52d380eb62946d2a.html).一些和弦的进行,除了遵守必须要遵守的一些规则(比如主和弦的位置),其他的走向都是可以与感情挂钩的。举个例子,

1、C—Am—F—G(参考曲目:蔡琴—恰似你的温柔)

2、C—G—Am—F(参考曲目:Beyond—海阔天空 主歌)

这两个例子都是非常明亮的.

1、Am—F—C—G(参考曲目:黄义达—我懂、set me free)

2、Am—C—G—Am(参考曲目:Beyond—灰色轨迹 主歌)

这两个例子都是比较柔和温婉的。两边不同的主要原因是大小调问题。

来源:(1)http://www.wenkuxiazai.com/doc/614fe01b52d380eb62946d2a.html

(2)https://www.douban.com/note/345221364/

也就是说,我们先定下一个感情基调,再选择一个和弦走向,甚至多个和弦走向,都是有道理的。

但是这种方法是有缺点的,就是大调和小调只能二选一(在短音乐片段中),像大调转小调完成感情变化是很难的事情。《少年锦时》之中有C变成C7和弦的例子,这样的转调应该是很难自动生成的。

下一个话题,怎么根据和弦填写旋律进去?

一言以蔽之:走和弦音作为主音。你可以在你和弦进行中的最高音上增加一些音符,建立你的旋律或者Bassline。这样创造出来的旋律跟随着和弦进行的脚步,因此很容易上口,被人记住。同样根据张力法则,当每个和弦演奏时,耳朵总是会期待下一个和弦和作为主音的最高音。记住,只有当“张力”和弦被解决后,大脑才会觉得满意,才会认为这样的进行是好的。

=========================================================

接下来将怎么通过深度学习捕获这些和弦走向。

首先我们提取大量歌曲中的和弦走向,将其以8个或者16个为一组,作为一条数据,这样可以形成一个封闭的段落,并且也可以演示出变化感。然后我们人工指定这段音乐的情感表达是什么样子的。

之后,我们使用GRU(LSTM的一个变形),根据之前定下的和弦,预测之后出现的和弦,从而生成一条完整的和弦走向。因为经过了充分学习,这个和弦走向很可能就是符合和弦走向要求的。

如果要考虑精度,我们可以人为地将一些经典和弦作为Attention加进去,但是凭我现在的水准,做出这个模型应该不是一件简单的事情。

=========================================================

说一下整个项目的全部流程:

1,输入一张照片。

2,通过Cognitive Service进行图片色调、实体识别。

3,转化成一个向量,通过卷积神经网络进行情感分类。

4,将情感向量输入LSTM,进行和弦生成。

5,根据和弦,再通过一个其他的网络生成主旋律(这一块还没想好具体怎么做)。

数据集的准备,是要准备两个数据集(后期可能还要第三个),分别标注了图片-情感,情感-和弦走向,这样才能很好地训练网络。

下一篇博文,将会展示数据集的准备和LSTM网络搭建。