1. 程式人生 > >【Python圖像特征的音樂序列生成】如何生成旋律(大綱),以及整個項目的全部流程

【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網絡搭建。

【Python圖像特征的音樂序列生成】如何生成旋律(大綱),以及整個項目的全部流程