如何實現演算法作曲?


謝邀。

已有相當長一段時間沒有關注這方面的研究動態。依我之前的印象,演算法作曲方面的研究很雜。國外的工作比較早,國內也有,音樂或IT背景的人都有參與。目的不同,手段多樣,方法各異。沒有興趣做綜合性的評述。還是談談我個人的實現方法吧。

我在做的是一個輔助作曲軟體。最終目的是讓不懂音樂(最好是稍懂一點音樂)的人藉助該軟體能夠譜曲。儘管不少人採用人工神經網路或其他演算法來實現這一目的,我還是覺得專家系統的方式更靠譜一點。一如當年深藍和電腦圍棋那樣。

可以總結出三個主要的實現途徑。一是搜索統計、二是規則提取,三是人工介入。不妨以演算法作曲中的一個小側面--音階音列的設定來稍作展開。

一. 搜索統計

大量曲譜的輸入是必須的。並按風格加以分類。從而建立起音列和風格、音列和基準音高、音列和旋律跳進方式、音列與句首尾音設定方式等的對應關係。 這樣用戶就可以根據設想中的曲風,結合節奏型和速度,來選擇音階和音列。

二. 規則提取

除了比較熟悉的自然調式音階和五聲調式音階外,還有大量別具風味的民族和地域音階。如教會音階、全音(佳美蘭)音階、布魯斯音階、印度音階、吉普賽音階、匈牙利音階、日本音階、俄羅斯音階、爵士小調音階、阿拉伯音階、拿波里大小音階等等。當然還應該有一些從未受人關注的但卻在美學上站得住腳的音階。計算下來,5音音階、6音音階、7音音階共有1254種,基於樂理,設定了兩個規則,加以限制,篩選下來後還剩737個音階,遠大於已被人認知的音階。類似這樣的規則提取一般有兩個途徑,一是直接從樂理出發,二是從統計結果出發。

三. 人工介入

針對用戶設定的風格,往往有多種音階、同一音階中又有多種音列可供選擇。此時傾向於人工介入,由用戶來自行抉擇。當然,在音列這個環節,人工介入並不是最重要的。但在旋律生成這個環節,人工介入,即由軟體來初選、由耳朵來精選是相當有必要的,不管支配這雙耳朵的大腦受過什麼樣的音樂熏染。另一方面,人工介入還可以避免編程工作過早地陷入一些細節問題。


麻繩理工學院的Diana S. Dabby 用混沌演算法(洛倫茲吸引子)對一些古典音樂進行變奏作曲。

她還在《自然》上發文介紹了各種變奏的方法。

參考:

Dabby, D. S. (1996). Musical variations from a chaotic mapping. Chaos, 6, 95-107.

http://www.sciencemag.org/content/320/5872/62/suppl/DC1


演算法作曲的任務有很多種,比如生成和弦進行,生成旋律,給旋律配和弦,生成四部和聲,生成爵士即興等。

目前應用到演算法作曲領域的演算法主要有幾種:

一、基於規則與音樂知識的作曲演算法

這類演算法很容易從字面上理解他們做了什麼,就是應用已有的作曲規則來進行作曲,比如使用勛伯格的十二音體系作為演算法規則生成音樂。[1]

除此之外,還有一種視角是針對音樂符號做語法分析,再通過語法進行作曲。

這類方法還有利用概率方法進行改進的,比如指定音符的跳進和時值概率。[2]

二、機器學習演算法

這是目前應用於演算法作曲的熱點工具之一。還可以再分成傳統機器學習演算法和人工神經網路。

1. 傳統機器學習類

傳統機器學習演算法類主要是指基於概率論和統計學的那一類機器學習演算法,其中使用馬爾科夫模型的最多。

馬爾科夫模型主要是假設狀態有馬爾科夫性質,即下一個狀態的概率只依賴於現在的狀態。主要使用的一個模型是隱馬爾科夫模型(HMM),這個模型有一層隱藏變數和一層觀察變數,可以想像成隱藏變數驅動著觀察變數在變化,很像和弦與旋律的關係。同時還有其他的馬爾科夫模型也被利用來進行演算法作曲,比如可變階數馬爾科夫模性(VMM)[3]和輸入輸出HMM(IOHMM)[4]。用這個的產品也有不少,比如MSR出的SongSmith[5]。

當然還有使用其他圖模型的演算法,有篇綜述可以參考[6]。

關於HMM,有篇Tutorial可以參考[7]。

2. 神經網路

近兩年很多新聞上出現的人工智慧作曲都是用的這類方法,多數都是藉助的RNN,

比如Sony CSL的DeepBach [8],學習巴赫的作曲,比較像;還有Google的Magenta項目,之前有A.I. Duet[9],最近剛出了Performance RNN[10]。

最近也看到有人嘗試用GAN來生成旋律[11],不過文章還沒發。

三、元胞自動機

四、其他演算法

[1] Gill, S. (1963). A technique for the composition of music in a computer.

[2] Computoser - rule-based, probability-driven algorithmic music composition

[3] On Prediction Using Variable Order Markov Models

[4] Input-Output HMM"s for Sequence Processing

[5] Microsoft Research Songsmith

[6] Jeanfrancois Paiement, Probabilistic Models for Music

[7] A Tutorial on Hidden Markov Models and Selected Applications in Speech Recognition

[8] DeepBach: a Steerable Model for Bach Chorales Generation

[9] https://magenta.tensorflow.org/2017/02/16/ai-duet

[10] https://magenta.tensorflow.org/performance-rnn

[11] https://groups.google.com/a/ismir.net/d/msg/community/16Xsi41m3Is/hubKj4udBgAJ


推薦閱讀:

網上有林憶蓮連升八個 key 的視頻,這個對於歌手難度大嗎?
電子樂中的採樣是怎麼做到的?
求世界頂級混音師的作品分享,有了解的人嗎?
為什麼孫燕姿新歌《跳舞的梵谷》網易雲評論增長迅速?
曾軼可的歌詞好在哪裡?

TAG:音樂 | 演算法 | 作曲 |