復(fù)雜流行爵士和聲進(jìn)行的無(wú)限生成方法(基于帶條件的庫(kù)遍歷)
“庫(kù)遍歷 + 條件限制”(Library plus Constraints)方法是利用計(jì)算機(jī)編程自動(dòng)無(wú)限生成音樂(lè)的有效模式之一。雖然這是一種“專(zhuān)家系統(tǒng)”形式的老舊范式,但其結(jié)果與如今流行的機(jī)器學(xué)習(xí)方式生成的內(nèi)容相比毫不遜色。話(huà)不多說(shuō),先上圖:
一、庫(kù)(Library)

這是在流行爵士和聲范圍內(nèi)以 C 為根音的所有(三音至七音)和弦的列表,制表者是我(@雷蒙德卡),我是用了英文制表,目前沒(méi)有中文版,還請(qǐng)見(jiàn)諒了。
這個(gè)堆滿(mǎn)了和弦類(lèi)型的列表可以看成一個(gè)“素材庫(kù)”,即“庫(kù)”(Library)。
二、加入的限制條件(Constraints)
以上所舉的“庫(kù)”為基礎(chǔ),加以限制條件(Constraints)排除“不恰當(dāng)”的進(jìn)行,以適配西方音樂(lè)的聽(tīng)覺(jué)習(xí)慣(基于傳統(tǒng)和聲寫(xiě)作的規(guī)則)后,即可依此遍歷其所有移位、轉(zhuǎn)位、排列、可能性,從而達(dá)到無(wú)限生成和聲進(jìn)行的效果。條件也非常簡(jiǎn)單,三個(gè)條件與生成步驟如下所示:

條件一:和弦必須屬于表中所列的類(lèi)型(包括移位、轉(zhuǎn)位、排列/重復(fù)音的情形)。
條件二:禁止四部同向。亦即,各聲部移動(dòng)的向量 {v1,?v2, ...,?vn}(單位為半音數(shù))必須至少有一個(gè)不同號(hào)(即反向進(jìn)行)或?yàn)榱悖绰暡坎粍?dòng))。
條件三:任一聲部的運(yùn)動(dòng)幅度不得超過(guò)大三度。亦即 |v1|,?|v2|, ...,?|vn| ≤ 4 . 圖中舉出了三音、四音、五音和弦的條件判斷示例各一,都是前后和弦音個(gè)數(shù)相同的情形。和弦音的個(gè)數(shù)也可以前后不同,如最后所舉的三例(分別為三音→四音、四音→三音、五音→四音和弦),此時(shí)進(jìn)行的向量不能做到一一對(duì)應(yīng),需以重復(fù)最接近的音的方式轉(zhuǎn)化為相同的音個(gè)數(shù),再算出進(jìn)行向量,過(guò)程從略。
更多限制條件(“色差”):按“奇異和弦”問(wèn)題中的“色差值”??從高至低排列,在連續(xù)生成模式中選取位于前??% 位置(取近似)的和弦。關(guān)于“色差值”請(qǐng)參考:https://zhuanlan.zhihu.com/p/91035254 。

三、程序輸入與輸出
程序輸入:
前后和弦音的個(gè)數(shù)是否始終維持相同?(Y/N) Y —— 輸入音的個(gè)數(shù)(3~7);N —— 輸入音的個(gè)數(shù)范圍(3~7),用“-”分隔,如“4-5”
連續(xù)生成和弦進(jìn)行嗎?按 Y 進(jìn)入連續(xù)生成模式,按 N 進(jìn)入單個(gè)生成模式。(Y/N)
連續(xù)生成模式:輸入 P 值,單位為百分比(%)。
單個(gè)生成模式:手動(dòng)輸入前和弦嗎?(Y/N)Y —— 請(qǐng)輸入前和弦,以MIDI鍵位號(hào)(0~127)表示各音,用空格分隔,如“60 67 76”(具有GUI界面者可以從鍵盤(pán)和MIDI文件輸入) ;N —— 將自動(dòng)隨機(jī)選取一個(gè)和弦作為前和弦。
程序輸出:
連續(xù)生成模式:按照輸入的要求,輸出連續(xù)的和弦MIDI鍵位號(hào)組成的數(shù)據(jù)列表,生成MIDI文件和播放。
單個(gè)生成模式:按照輸入的要求,列出符合要求的各個(gè)和及其色差,按色差大小從高到低排列,供輸出、播放、用戶(hù)預(yù)覽選擇。

人腦在找尋偶成的和聲靈感方面是很擅長(zhǎng)的,然而在純技術(shù)的角度上,電腦興許可以變得更擅長(zhǎng)于此道。這個(gè)算法的本質(zhì)始終還是窮舉硬算,還是個(gè)假AI,然而收效也相當(dāng)不錯(cuò)。在機(jī)器學(xué)習(xí)的今天,計(jì)算機(jī)自動(dòng)創(chuàng)作(尚且不談別的形式的真AI)可以達(dá)到怎樣的境界呢,之后還是相當(dāng)有看頭的吧。