第 4 章
分析與學習
4.1 音樂結構分析與學習
一個有架構的音樂結構是讓旋律及和弦伴奏的產生有所依據,而音樂有如文章一般的結 構,音樂曲式中樂段(section)相當於文章的段落,音樂的樂句(phrase)相當於文章的句子,
樂句及樂句的停頓間隔相當於句子間的逗號,音樂終止式(cadence)相當於文章的句號。
我們將根據 L. Stein[46]將音樂結構分成三個部分:樂段(section)、樂句(phrase)和動機 (motive)。一個以上的動機組成樂句,一個以上的樂句構成樂段,樂段構成完整的音樂 曲式結構,音樂就是以小的重複小節組成大的重複小節,由這樣階層式的結構下構成的。
4.1.1 音樂結構分析
音樂結構是音樂重要的部份,相當於一首音樂的骨架,表示音樂最上層的結構。如圖4.1 為The Beatles 的 Yesterday 的主旋律,由樂譜中我們可以看出從第二小節到第八小節的 樂段,在歌曲的第九至十五、二十四至三十、三十九至四十五小節中一再出現。經由曲 式分析的結果,此曲式為AABABA。由於本系統是採 top-down 的方式來產生音樂。結 構分析後的資訊,可以讓系統在產生音樂時,知道反覆的位置及反覆的方式。
四
圖 4.1:The Beatles ”Yesterday” 音樂曲式分析範例
目前已有一些音樂結構分析的相關研究。W. Chai[3]從音訊資料找出重複性樣式來 做音樂結構的分析,其中共可分成五個主要步驟,(1) Feature extraction,對音訊資料做 特徵的擷取,以相鄰兩兩各自重疊(overlap)的 Frame 為一個單位,以 Autocorrelation 或 FFT(Fast Fourier Transform)的方式來擷取其特徵值作為向量,(2) Pattern matching,將連 續且數目固定的向量做為片段(segment),連續的兩兩片段互相重疊,在各個片段中找出
在音樂序列中重複的情形,(3) Repetition detection,根據前一個步驟找出重複樣式,(4) Segment merging,將連續多個片段構成的重複樣式合併起來,(5) Structure labeling,將 每一個區段(section)根據其重複的關係給予邏輯的標籤。即可得到如圖 4.1 類似的結構。
M. C. Ho[20]以音樂動機來做音樂分段,主要分成四大步驟,(1) 資料前處理(Data preprocessing),將 MIDI 格式轉換成文字格式的資料,再用主旋律擷取的方法 all-mono 及IOI(Inter onset interval),(2) 粗略分段(Rough segmentation),做重複樣式的探勘,刪 除掉非直覺性(non-trivial)的樣式,找出大段落的重複性樣式,(3) Motive treatment,利用 之前粗略分段的結果,根據音樂動機變化的多種形式,分別對這些段落找出音樂動機,
(4) 精細分段(Fine segmentation),根據找出來的音樂動機,來判斷何處為段落。
在我們的電腦音樂作曲系統中,樂段包含了四個參數標籤(label)、在所屬音樂中此 樂段的個數(occurrence)、樂句個數(num_Phrase)和樂段長度(length),我們以 4-tuple<label, occurrence, num_phrase, length>來表示一個樂段。而樂段所構成的序列就是音樂結構。
接下來我們將介紹我們所提出音樂結構分析的方法。系統在Feature extraction 後得 到了音樂的音符序列,這個音符序列再經由下列五個步驟得到音樂結構。
(1) 音高音長二元序列擷取
首先,我們先從音符序列中擷取出音高及音長資訊。音符為多個維度所構成,其中包括 發聲時間(onset time)、音高(pitch)、音長(duration)、頻道(channel)和力度(velocity),而實 際上我們只取音符的先後順序、音高及音長這三個維度,做為由音高音長所構成的序 列。在這裡將中央Do 的音高以 60 表示,高一個半音則加 1,音長長度一拍則記為 1。
以圖4.2 為例,擷取出的序列為<(67, 1), (64, 1), (64, 2), (65, 1), (62, 1), (62, 2), (60, 1), (62, 1), (64, 1), (65, 1), (67, 1), (67, 1), (67, 2), (67, 1), (64, 1), (64, 2), (65, 1), (62, 1), (62, 2), (60, 1), (64, 1), (67, 1), (67, 1), (60, 2)> 。
圖 4.2:Pitch and duration extraction 的例子
(2) 重複樣式探勘(Repeating Pattern Mining)
在進入到重複樣式探勘的作法前,我們先做Frequent Repeating Pattern 的基本定義。
[定義 3.1] 序列 P=(p1,p2,…,pn) 為序列 S = (s1,s2,…,sm)的部分序列(subsequence),若∃ i, 0
≤ i≤ m-n+1,使得 p1=si, p2=si+1…, pn = si+n-1 ,表示成P ⊆ S。反之,我們以 P⊄S 表示。
[定義 3.2]序列 P=(p1,p2,…,pn) 為序列 S = (s1,s2,…,sm)的精確重複樣式(exact repeating pattern) , 如 果 存 在 一 個 集 合 PS={psi|1≤ i≤ k 且 ∀ i, 0 ≤ psi≤ m-n+1} , 使 得
p1=sps,p2=sps+1,…,pn=sps+n-1。其中,k 稱之為 P 在 S 中的支持度(Support),我們以
Support(P)=k 表示。
[定義 3.3]給定一數值 ms,若序列 P 在 S 中的支持度 k ≥ ms,則 P 稱之為 S 的 Frequent Repeating Pattern。數值 ms 稱之為最小支持度(minimum support)。
[定義 3.4]如果 P 為 S 的 Frequent repeating sequence pattern,且不存在其他 S 的 Frequent Repeating Pattern P’,使得 P ⊂ P’。則我們稱 P 為 Maximal repeating pattern。
[定義 3.5] P 為 S 的 Frequent repeating sequence pattern,如果∀ P’, P≠P’,P’為 S 的 Frequent repeating sequence pattern,P ⊄ P’且 Support(P)≠Support(P’),則我們稱 P 為 Non-trivial repeating pattern,簡稱 NTRP。
有了由音高和音長所組成序列後,我們在這個序列上找Frequent Repeating Pattern。
常見找Frequent Repeating Pattern 的方法包括生物資訊領域中的 suffix tree[24]及音樂探 勘領域中[23]所提出的 Apriori-based 和 Correlative matrix。在我們的系統採用 Correlative matrix 來達成,而我們也將過濾掉較不重要的樣式,留下 NTRP,如圖 4.2 中,
<(67,1),(65,1),(65,2)>為 Frequent Repeating Pattern ,則<(67,1),(65,1)> 和<(67,1)> 亦為
Frequent Repeating Pattern,然而<(67,1),(65,1)>的支持度同<(67,1),(65,1),(65,2)>為 2 則視 為不重要的pattern,將其刪除。
(3) 樣式挑選演算法(Pattern Selection Algorithm)
在結束前一個步驟後,圖4.3 為”小蜜蜂”ㄧ曲經由 non-trivial repeating pattern mining 結 果的例子,圖4.3 中屬於同一區域的長條為一 NTRP 的 instance 在音樂中分布的位置,
上方的刻度單位為小節。我們發現找出的樣式仍然很多,但並非每一個樣式都適合拿來 分析,因此我們增加挑選樣式的兩個條件,a. 樣式間彼此不重疊,b. 這些樣式所涵蓋 的時間加總為最大。對於這個問題,我們將修改生物資訊領域中的外顯子鏈結演算法 (Exon-Chaining algorithm)來達成。
圖 4.3:”小蜜蜂”ㄧ曲經 non-trivial repeating pattern mining 的結果
Exon-Chaining[24]的問題是給定權重區間(weighted interval)的集合,找出彼此不重疊且 加 總 的 權 重 為 最 大 的 區 間 , 此 問 題 的 解 法 為 Dynamic programming。我們將這個 Exon-Chaining 問題中的權重改成樣式的長度來解決我們的問題,其演算法如圖 4.4。
Algorithm Pattern-Selection
Input: A set of instances with duration
Output: A maximum duration of instances from this set 1) for i←1 to 2n
2) si← 0 3) for i←1 to 2n
4) if vertex vi in array corresponds to the right end of an instance P 5) j←index of element for left end of the instance P
6) w←max{sj + w, si-1} 7) else
8) si←si-1 9) return s2n
圖 4.4:樣式挑選演算法
圖4.5 為 Pattern-Selection 問題解法範例,給定具權重的 instance n 個(n=9)。首先,
我們假設所有instance 左右端點彼此的位置皆相異。對 instance 中左右端點的集合排序,
建構出長度為 2n 的一維陣列 S2n。對每 n 個 instance 和每個相鄰的端點位置都建立一個 3-tuple 的邊(edge),區間則紀錄左右端點對應到 S2n的 index 及其權重,如權重為 5 的 instance,其邊記錄為<1, 5, 5>;若為相鄰端點則權重為零。一共有 n+(2n-1)個邊。接下 來,依序填入 S2n的值。當填入到第 i 個位置時,若存在邊的右端點在這個位置,則找 其右端點所在 S2n的值 Sj和邊的權重 w,取 Sj+w 與 Si-1的最大值;若沒有邊的右端點在 這個位置,則 Si=Si-1。例如當我們填到第五個位置時,存在邊的右端點,取0+5 與 1 的 最大值填入陣列。依序填完整個陣列後再做回溯法(backtracking),找出符合要求的 instance。
圖 4.5:Exon-Chaining 的範例[24]
(4) 經驗法標號(Heuristic Labeling)
這個步驟中我們先給兩個條件 a. 若樣式長度小於兩小節則刪除此樣式,b. 若相鄰兩樣 式間間隔大於兩小節則形成一個新樣式挑選出的樣式。再根據其所屬的NTRP 及出現的 前後順序,依序標上A, B, …的編號,屬同一 NTRP 則給相同的編號,則形成一樂段的 序列。
(5) 樂句個數分析(Number of Phrase Analysis)
上個步驟得到的樂段序列中,每個樂段仍缺少樂句個數的參數。這個步驟將分析樂段中 樂句的個數。我們利用利用第六章所提到動機探勘的方法。演算法如圖 4.6,每一個樂 段範圍內的旋律做為輸入,找出長度最長音樂動機的重複次數,若樂段減去音樂動機長 度乘上重複次數為零,則樂句的個數則為最長音樂動機重複的次數,若不為零,則樂句 的個數則為最長音樂動機重複的次數加一。
Algorithm Determining-the-Number-of-Phrase Input: melody m in a section
Output: number of phrase
1) motif set MS = motif_mining(m)
2) maxLengthMotif = finding max length motif in MS
3) maxLengthMotif = m.length – ( maxLengthMotif.freq×maxLengthMotif.length ) 4) if (restLength==0)
5) return maxLengthMotif.freq 6) else
7) return maxLengthMotif.freq + 1
圖 4.6:樂句個數分析演算法
4.1.2 音樂結構模型
音樂結構模型是用來描述樂段序列集合的行為。從對音樂的觀察中,我們可以發現不同 風格的音樂中,曲式的結構也不同,樂段的標籤前後順序及重複次數不同,其所包含的 樂句個數也不相同。因此我們從給定音樂中找出這樣的關係,作為音樂產生的根據。
本系統中,音樂結構的模型是一個資料表,所有音樂的獨立樂段之統計資訊為資料 表中的一個記錄。當產生音樂結構時,經由這個資料表來決定每個參數的機率,詳細的 產生方式請見5.2 節。
4.2 和弦分析與旋律風格學習
和弦是用來豐富旋律的和聲,在音樂中扮演著背景的角色,如同一幅畫中的背景。不同 的背景將會對主題襯托有著不同的效果,音樂亦是如此。和弦為音符所構成,音符與音 符間的距離為音程差,表4.1 為八度音內音程差的種類。舉例來說,第五筆原音高為 C,
目的音高為E,其相差半音數為 5,音程中文名為大三度,英文名為 Major third,簡寫
為M3。
表 4.1:音程表
原音高 目的音高 半音數 音程簡寫 音程英文名 音程中文名
C C 0 Unison Unison 同音
C C# (Db) 1 m2 minor second 小二度
C D 2 M2 Major second 大二度
C D# (Eb) 3 +2/m3 Augmented second; minor third 增二度/小三度
C E 4 M3 Major third 大三度
C F 5 P4 Perfect fourth 完全四度 C F# (Gb) 6 +4/dim5(tritone) Augmented fourth; diminished fifth 增四度/減五度 C G 7 P5 Perfect fifth 完全五度 C G# (Ab) 8 +5/m6 Augmented fifth; minor sixth 增五度/小六度
C A 9 M6 Major sixth 大六度
C A# (Bb) 10 +6/-7 Augmented sixth; diminished seventh 增六度/小七度 C B 11 M7 Major seventh 大七度 C C 12 Octave(8ve) Octave 八度
經常使用的和弦種類為三度的音程差變化所組成,和弦名以根音及其與其他音符間不同 的音程差所命名,如圖4.6 為所示。三個音符所構成的和弦稱三和弦(triad),四個音符所 組成的和弦由三和弦加上根音的七度音所組成,稱七和弦(seventh chord)。
圖 4.7:三和弦的例子
在同一個調的音樂中所使用的和弦大都為順階和弦,所謂順階和弦為自然音階所組成的
和弦,以C 大調為例,如表 4.2,其順階三和弦為 C、Dm、Em、F、G、Am 及 Bdim。
若以自然音階的第一個音為根音所組成(圖 4.7 為 C 大調自然音階),則為順階和弦的第 一級和弦,以此類推,表4.2 為順階和弦的種類。
圖 4.8:C 大調自然音階
表 4.2:C 大調順階三和弦
級數 I II III IV V VI VII
和弦 C Dm Em F G Am Bdim
組成
5 3 1
6 4 2
7 5 3
1 6 4
2 7 5
3 1 6
4 2 7
根音 1 2 3 4 5 6 7
給定一段旋律,和弦產生(Chord Generation)問題希望產生合適的和弦序列。如圖 4.9 為 一個旋律搭配和弦的例子。
圖 4.9:旋律搭配和弦的例子
在本系統中我們要產生的是 C 大調的音樂,因此我們假設所搭配的和弦為 C 大調
的順階三和弦,故共有七種和弦種類。考慮豐富的音樂和聲,和弦的種類絕對不只這幾 種,但是在同一個調性的音樂中,所有搭配旋律的和弦,其基本元素都為順階三和弦。
4.2.1 和弦分析
根據對和弦搭配的樂理,影響和弦搭配的因素有三:
a. 區域因素(local factor):在要配置小節內的音符越多或音長越長屬於某個和弦的和弦 內音,則搭配此和弦的機會越高。
b. 全域因素(global factor):小節所在音樂結構的位置,若為終止式,則某些和弦搭配的 機會越高。此小節前後小節的和弦的影響。
c. 普遍因素(universal factor):不同風格音樂,對相同前述的兩個條件下,搭配和弦的方 式亦可能不同。
過去關於和弦、和聲的研究中,J. Pickens[38]利用和聲的模型來作多音音樂的檢索。
B. Pardo[35][36]對調性音樂做和弦的分析。C. Rapheal 等人[40]利用圖的模型做和聲的分 析。在和弦搭配的研究,F. F. Kuo[25]中所提出以統計方式及考慮前一個和弦的影響來 產生搭配和弦。W. N. Cheng[4]利用統計及動態規劃(dynamic programming),S. W. Fu[16]
除了統計及動態規劃又考慮了樂理終止式理論提高辨識率。這些研究中都沒有考慮和弦 搭配的全體因素,我們將這個部分列為未來研究。
在本系統的和弦分析部份,我們採用F. F. Kuo[25]中所提到統計方式來達成,演算 法如圖4.10。此方法分析小節中的旋律,對所有可能搭配的和弦算分數。這個分數除了 考慮旋律的音符是否為和弦音外,也考慮了和弦進程,也就是前一個和弦對要搭配和弦 的影響。因此,一首音樂則會搭配上和弦所組成的和弦序列。
Algorithm Chord-Assignment Input: previous chord pre_c Output: chord C
1) set scores of each chord c Sc to zero, and SU=1 //Chord-Assignment-Stage 1 2) if SUI
(
FirstMeasureULastMeasure)
≠φ then Schord I +=103) for each distinct pitch p accumulate the duration D(p) 4) P={all longest pitches p}
5) if maxD(p)≥ 50. ×SUthen score=2
6) else if P=1then score=1 else score = 0 7) for each chord c do
8) for each distinct pitch p in SU do 9) if c contains p then Sc ++
10) if cIP≠φ then Sc+=score 11) if cardinality of { | =max i}=1
c i S
S
c then return c 12) else if SUIFirstMeasure=φ do
13) for each chord c do// Chord-Assignment-Stage2
14) if root(pre_c)!=leading note and root(c) is descending 5th, descending 3rd or descending 4th of root(pre_c) then Sc+=2
15) if root(pre_c) is subdominant, dominant or leading note and root(c) is ascending 2nd then Sc += 2
16) if ((pre_c=Ⅰ and c=Ⅳ or pre_c=Ⅱm) and (c =Ⅴ or pre_c=Ⅲm and c=Ⅵm) or (pre_c=Ⅳ and c=Ⅴ) or (pre_c=Ⅵm and c=IIm)) then Sc += 2
17) if pre_c=Ⅴ then
18) if c=Ⅰor c=Ⅵ then Sc+=2 19) if c=V then Sc+=1
20) if cardinality of{ | =max i}=1
c i S
S
c then return c 21) else for each chord c do
22) if root(c)=lowest pitch in SU then Sc+=2
23) return { | max i}
c i S
S c
C= =
圖 4.10:和弦搭配演算法[25]
4.2.2 旋律風格模型
我們將旋律用和弦序列來表示,當給定多個和弦序列時,如何找出這些和弦序列的特 徵。我們利用F. F. Kuo[25][42][43]所提出的旋律風格探勘,而收集探勘後的樣式則作為 這裡所謂的風格模型。
圖 4.11:Melody style model 建構的例子
圖4.11 為旋律風格模型建構作法的例子,首先我們先將一首音樂的和弦序列根據樂 段切開,對於每一個分開後的序列我們稱作樂段和弦序列,之後留下不同樂段的樂段和 弦序列,對於每一個樂段和弦序列表示成三種特徵:
(1) Chord set:和弦序列以集合表示。
(2) Bi-gram set:和弦序列中相鄰的兩個元素表示成一個集合的元素。
(3) String:直接以和弦序列表示。
若有一樂段和弦序列為<I, VIm, IIm, V>則其 Chord set 為{I, VIm, IIm, V},Bi-gram set 為 {(I, VIm), (VIm, IIm), (IIm, V)},String 為<I, VIm, IIm, V>。接下來,收集相同的特徵表 示法分別構成三個資料表Chord set table、Bi-gram table 及 Substring table。最後對於 Chord set table 及 Bi-gram set table 採用 frequent itemset mining 的方法來探勘常見的 Chord 及 Bi-gram 樣式,Substring table 則採用 frequent substring mining 的方法,這個方法修改於 Apriori 探勘演算來達成。最後收集所有三種常見樣式得到 Melody style model。
4.3 音樂動機探勘與學習
動機(motif)是構成旋律最原始的單位,而動機的組成至少是由一個特定的節奏(rhythm) 及特定的音程差(interval)來構成的[46],其長度約為一至兩個小節。根據音樂動機發展 理論,音樂動機以不同的方式反覆出現來產生旋律。根據[46]一書提到,動機的變化主 要 包 括 六 種 Repetition 、 Sequence 、 Contrary motion 、 Retrograde 、 Alternation and Augmentation/Diminution。
如圖4.12,A 為動機在低音聲部重複了一遍,B 為 A 的變形稱為模進(sequence),
所有在A 的音符都向上移了相同的位置而形成 B 。C 的部份也是 A 的變形稱為反向進 行(contrary motion),在 C 中所有音符進行的方向都正好和 A 相反。E. R. Miranda[33]也 提到好聽的音樂是由一個或多個音樂的樣式(pattern)反覆出現以及樣式與樣式之間的關 連性來構成的,不論在古典樂或是非古典音樂,概念都是相同的,而古典音樂中動機之 間的關係較非古典音樂更為嚴謹。
圖 4.12:動機重複變化示意圖
在本統中,我們對每一首音樂找出一個或多個屬於這首音樂的原始音樂動機,當有 多首音樂時,系統將判斷出代表這些音樂的音樂動機,再根據動機來產生音樂
4.3.1 音樂動機探勘
這個部分我們對動機的變化分類一一做介紹,但不考慮Alternation 這種變化,因為這種 動機的變化只是其他變化的結合。這裡的方法是[20]所提出的動機探勘。
(1) Repetition
如圖4.13 所示,M 為音樂動機的原型,M’為音樂動機的變化,是以絕對性的重複來發 展旋律,讓人加深對這個樣式的印象。
圖 4.13:Repetition 音樂動機變化的例子
(2) Pitch interval repeating
Pitch interval 是指兩個連續音符的音高差。Pitch interval repeating 在音樂的意義是 Transposition。圖 4.14 為 Pitch interval 重複的範例,純粹看音高時,方框所標示的地方 不算重複出現。但是,我們以Pitch interval 來看,我們就可以知道方框標示的地方是一 個重複樣式。
圖 4.14:Pitch interval repeating 音樂動機變化的例子
(2) Sequence
變化後的動機M’是由原型 M 在調性音階的範圍內做整個樣式的上移或下移,這是作曲 手法中最常見發展旋律的方式,如圖4.15。若我們觀察三個樣式的音高序<64, 65, 64, 62, 67>, <62, 64, 62, 60, 65>, <60, 62, 60, 59, 64>後,較難察覺出三個樣式之間的關係,若我 們經由觀察調性中的音程差,轉為<1, -1, -1, 2>, <1, -1, -1, 2>, <1, -1, -1, 2>,即可發現三 個樣式重複的關係。
圖 4.15:Sequence 音樂動機變化的例子
(3) Contrary motion
在這類型的音樂動機變化,是將節奏的樣式固定,而音高的樣式做相反進行的變化,如 圖4.16 例子中 M 調性中的音程差序列為<1, 1, 1, -2, 1, -2>,M’則為<-1, -1, -1, 2, -1, 2>
圖 4.16:Contrary motion 音樂動機變化的例子
(4) Retrograde
Retrograde 的音樂動機變化,如文字修辭技巧中的回文。圖 4.17 中 M 為音樂動機的原 型,固定這個樣式的節奏,將音高的序列反向的排列形成新的樣式M’。
圖 4.17:Retrograde 音樂動機變化的例子
(5) Augmentation/Diminution
圖 4.18:Augmentation/Diminution 音樂動機變化的例子
當作曲家利用這種音樂動機變化時會將改變原始的音樂動機的節奏等比例的增加或減 少,藉此達成音域動機的變化。如圖4.18 中的例子 M’樣式的節奏為 M 的兩倍,M’’樣 式的節奏為M 的二分之一。
4.3.2 音樂動機挑選學習
在探勘出音樂動機後,我們會記錄每一個音樂動機的原型,及其以變化方式出現的次 數。當有多首音樂時,每首音樂有各自的音樂動機,那些音樂動機較能能夠代表這些音 樂,以供系統使用來產生新的音樂,是這個部份所要討論的。
建構動機挑選模型的目的是為了描述音樂動機的代表性,代表性越高則被挑選到的 機率就要越高。而其中要考慮的因素包括此音樂動機在自己所在音樂中的代表性以及這 個音樂動機在其他音樂的代表性。在動機探勘中找出各個動機且統計各種變化出現的次 數,一個動機 m 以各種變化出現在這首音樂 music,記作 Freqm,music。我們發現到長度較 長的音樂其音樂動機重複的次數可能會較高,但是相對於其他長度較短的音樂中,可能 較佔優勢,因此我們要做 Normalize,方法是將這個音樂動機除以其所在音樂中所有音 樂動機的 Freq 值加總,記作 Support,如(a)式。ASupport 將音樂動機 m 若在其他音樂出 現,則累加其所在音樂的 Support 值,DB 表示音樂資料庫。最後我們將這些 ASupport 都Normalize 在 0~1 之間,(c)公式則是為了達到這個目的,記作 NASupport,其中 Min(DB) 及 Max(DB)分別表示所有音樂資料庫中 ASupport 的最小及最大值。NASupport(m,DB)則 為 m 被挑選到的機率。
∑
∈∀
=
music motif
music motif music m
Freq music Freq
m Support
,
) ,
,
( (a)
∑
∈∀
=
DB am
am m Support DB
m
ASupport( , ) ( , ) (b)
1 ) ( )
(
1 ) ( )
, ) (
,
( − +
+
= −
DB Min DB
Max
DB Min DB
m ASupport DB
m
NASupport (c)