震驚!電腦或將成為音樂系學生最大敵人(上)

如果你認識音樂系的同好,一定會常常見他們為了「和弦(chords)」而苦惱;而電腦編程應用的普及,不但解決了他們的煩惱,更逐漸威脅他們的地位!你或許會想,編程如此「機械」、「科學」的技術,似乎與音樂風馬牛不相及,那麼就讓這篇文章刷新你的認知。

(令人又愛又恨的和弦)

開始前,先讓我們了解一下什麼是和弦。簡單而言,和弦是三個或以上的音的組合,音與音之間音程(interval)、排列的差異會產生出不同的和弦,各自具有特定的名稱和功能。基本上,幾乎所有旋律音樂都是由連續的和弦組成,我們稱為「和弦進行(chord progression)」。和弦進行在不同類型的音樂中有不同的規則(rules),因此分析和弦進行及配和弦(harmonization)是分析音樂、作曲及編曲的必要因素。

看到這裡,你或許會靈光一閃 — — 規則!沒錯,電腦最擅長處理人類最討厭的大量規則 — — 前提是我們找到一些可量化的(quantifiable)準則。對於和弦,我們最需要量化的元素就是音。我們當然可以直接用音名(就是那些C、D、E、F、G…)來表示不同的音,但這樣電腦便難以計算音與音之間的關係,因此我們需要換一個思路:大家最熟悉的鋼琴共有88個鍵(音),我們能不能直接用數字1–88代表所有的音呢?答案是:可以的!事實上,國際早有一套通用的音樂數位介面(MIDI)用以儲存音的資料,其中音高正是用數字來代表 — — 不過,鋼琴最低的音(A0)的MIDI值不是1,而是21,這是因為理論上存在著許多比A0還要低的音。

(鋼琴88個鍵對應的音名及MIDI值[1])

明白和弦音的量化表示方式後,我們便可以通過計算音程、排列組合等,分析及創作不同的和弦,並將規則應用在和弦進行上。例如,古典音樂(就是你鄰居家小孩經常彈的莫扎特、貝多芬之流)中和弦進行的其中一條規則是禁止「平行五度(parallel fifth)」,那麼我們只需計算出五度音程的MIDI數字差(沒錯,是7,相當於音樂術語中的半音音程(semitone interval)),再檢查兩個和弦的相同聲部間的音程是否皆等於7即可。(下圖為參考Python程式碼,如果你熟悉其他和弦進行的規則,不妨猜一猜藍色圈中的「等於0」是什麼意思(答案在文末)!)

(在Python中,「==」符號用作比較兩者「是否等於」,「return False」是告訴程序「這不對!」的意思,前面的「%12」則是取除以12後的餘數(不同聲部的音程可能超過一個八度,因此需要取餘數來作比較)。因此紅色圈的那一行的邏輯為:兩個聲部的連續音程都等於7,屬於平行五度,違反樂理規則,所以不對!)

如此一來,創作不同的和弦進行以達致編曲、作曲的效果,也再不是一件困難的事:我們只需讓電腦產生出所有和弦音的組合,再檢查所有規則,過濾出全部可能性即可!是不是很簡單呢?當然,這樣可能有點慢,因此我們可以通過一些簡單方法,例如限制產生組合的數目和音域等,避免進行一些多餘的運算 — — 這也更符合音樂家作曲時的思路。所以,再也不要取笑你們的音樂家朋友了 — — 他們其實每天都在進行精密的數學運算!然而,人腦的運算比起電腦還是太慢了,假如比拼即興創作,電腦配和弦的速度恐怕會讓音樂系的學生望塵莫及吧!

當然,音樂的魅力在於,她雖有跡可循、卻絕不墨守成規。音樂家在創作時往往會跳出規則的限制,令音樂變得更人性化,卻也導致另一個問題出現:和弦分析沒有一個固定答案,在不同的理論背景下可以有不同的詮釋,而這一切是難以量化的。其實,不止程序員會為此頭痛,連專業的音樂家也經常為了和弦的不同詮釋而爭論不休。那麼,有沒有什麼科技手段可以幫助解決這一難題呢?這就不得不提近年發展得如火如荼的人工智能(Artificial Intelligence)了。

我不打算在此詳細講解何謂人工智能,否則文章的篇幅恐怕會超出十倍。人工智能的其中一個龐大分支為「機器學習(Machine Learning)」,基本概念是通過大量數據分析,找出數據中的「規律(patterns)」,再應用在其他數據上,常見的做法為監督式學習(supervised learning,即數據本身有標籤(label),尋找相同標籤的數據之間的關係)及非監督式學習(unsupervised learning,即數據沒有標籤,純粹將類似的數據進行聚類(clustering))。曾有一位音樂系教授對我說,樂理的本質其實是一門統計學,倒非常符合人工智能的方向。

延伸閱讀:機器學習跟統計學差在哪?

(機器學習中十分常用的Clustering Algorithm:K-mean Algorithm[2])

由於機器學習以發現「規律」為主,比起第一個rule-base的方法硬搬「規則」顯得人性化許多,也能解決一些規則以外的問題。然而,這方法也有一定缺陷:太過依賴「有效」及「充足」的數據。什麼叫有效及充足的數據?舉例來說,如果你只給音樂系學生學習3首肖邦的夜曲,卻讓他們分析全部32首貝多芬的奏鳴曲,這似乎有點強人所難吧 — — 電腦亦然,而且它會比人類處理得更糟!因為它除了你輸入的數據以外,已經不具備任何其他知識了。機器學習中,數據的匱乏會導致各種問題出現,常見的有過適(overfitting)、乏適(underfitting)等,有興趣的朋友可以自行查詢相關資料。

以音樂數據而言,涵蓋愈多時期、種類、音樂家的作品當然愈理想。但可惜的是,到目前為止網絡上找到公開的帶有標籤(如和弦代號)的音樂數據實在太過稀少;即使有,這些數據的格式往往不統一,無法輕易使用。本人大學畢業論文的其中一部分為預測音樂的和弦進行(Chord Progression Prediction),最初運用監督式學習分析42首人手標籤的鋼琴曲,僅達到62%的準確率 — — 這在音樂考試中大概只有C級的分數吧!如果你不知道42這個數字是什麼概念,可以參考機器學習的入門項目Mnist Dataset,它可是分析超過50000多張圖片數據[3]才能達到接近百分百的準確率!因此,若想和弦預測的準確率繼續突破,還要依賴各領域的同好幫忙產出更多音樂數據啊!

(“Treat Music Theory as Rocket Science?!”)

這樣看來,標題所言似乎只是危言聳聽,卻也絕非戲言!相信隨著相關數據的不斷增加及人工智能的快速進步,現代音樂的發展進程無可避免需要藉助電腦、尤其是人工智能的力量。為了造福廣大跟自己一樣的音樂愛好者,各領域的同好都要好好努力,同時才不會被電腦打敗啊!

下文我們將針對和弦在音樂創作、音樂分析中的功能,詳細舉例說明電腦科技在其中的具體應用,以及人工智能同時作為工具及競爭對手,如何幫助人們改善相關的學術研究。

答案:圖3藍色圈的那一行是檢查「平行八度(parallel octave)」(其實圖片中已經寫了答案啦XD)。但八度的音程是12,為什麼「==」後面不是12而是0呢?這是因為前面提到,不同聲部的音程可能超過一個八度,因此計算時需要取除以12的餘數來作比較,而八度音程都是12的倍數,取餘數後就等於0了。

[1] 88-notes classical keyboard-Note names and MIDI numbers: https://www.researchgate.net/figure/88-notes-classical-keyboard-Note-names-and-MIDI-numbers_fig8_283460243

[2] The 5 Clustering Algorithms Data Scientists Need to Know: https://towardsdatascience.com/the-5-clustering-algorithms-data-scientists-need-to-know-a36d136ef68

[3] THE MNIST DATABASE of handwritten digits: http://yann.lecun.com/exdb/mnist/

--

--