第三章
音樂分段
目前現有的研究中,音樂的分段大都利用人類的聽覺認知(Perceptual),並不是針 對音樂內容做主題式的分段。在一般的音樂裡面,常常包含一個以上的段落。音 樂的段落如同文章的段落,在每個段落包含一個主要的音樂主題。沒有研究對音 樂做分段的目的,是希望藉著分段後的結果,可以用來分析音樂的高階資訊。我 們希望可以針對音樂做主題式的分段,藉此可以讓使用者能夠瀏覽音樂的主題。
音樂的主題段落都包含一個主題,而音樂主題是以音樂動機(Motive)來決定 的,作曲者在作曲時,都會以音樂的動機作發展,完成一個主題的段落。因此,
動機會以不同的變化形式,重複出現在一個音樂的主題內。我們對整首音樂以探 勘重複樣式技術找出動機後,可以再利用動機將主題段落切割出來。
音樂動機序列與傳統的重複樣式特性不相同,主要差別在於樣式比對 (Pattern matching)的方法。傳統重複樣式探勘的方法,是以精確比對的方法檢查 樣式在序列中重複的次數,當樣式的重複次數超過Minimum support 時,就是經 常重複樣式 (Frequent repeat pattern)。音樂動機不是精確的重複出現,如果直接 用傳統比對樣式的方法,並不完全適合。所以我們必須針對動機的特性,設計出 適合的方法。音樂的動機包含一組特有的音程與節奏,作曲者在作曲時,利用動 機處理(Motivic treatment),不斷的改變動機。音樂學中,有一種音樂分析的方法,
稱為曲式分析(Analysis of Musical Form)。針對於音樂動機的部份,音樂學在曲 式分析歸納出動機處理的規則。因此,我們可以利用動機處理的規則,對音樂的 動機做重複樣式的比對,藉此探勘出音樂的動機。根據Stein[41],常見的動機處 理有六種,分別為Repeat、Pitch Interval Repeat (Transposition)、Sequence、Contrary
Motion、Retrograde 與 Augmentation 或 Diminution。我們必須針對不同的動機處 理,來設計探勘的方法。
我們將找出主題段落的方法分成四個步驟處理如圖 3.1 流程圖所示,並說明 如下。
1. MIDI 檔案必須先透過 MIDI Parser 剖析檔案格式,將 Binary 格式剖析成文 字格式資料。剖析後,從文字格式資料中擷取主旋律。我們利用 All-mono 的方法做主旋律擷取。擷取出來的主旋律會以兩種不同節奏表示法來表示,
Original duration representation 與 IOI duration representation。針對兩種表示 法,我們接著在下列步驟中分別找出可能的動機。
2. 我們對音樂主旋律先做粗略分段(Rough segmentation),以利於動機探勘。粗 略分段的目的是為了幫助動機探勘時,減少誤判的動機產生。在這裡我們以 探勘音樂的Non-trivial 重複樣式,來對主旋律做粗略分段。
3. 主旋律經過粗略分段後,從分段的結果找出動機。我們對產生出來的粗略分 段結果,做動機探勘。動機探勘針對動機重複特性修改傳統探勘重複序列的 方法,我們將修改後的方法稱為探勘 Motive Treatment 方法。
4. 最後,利用找出來的動機對音樂做主題式的精細分段(Fine segmentation)。
第一步驟Parser 輸出的格式與主旋律擷取的方法將在 3.1 介紹;第二步驟的 粗略分段作法,詳細的細節會在第3.2.1 詳加敘述。在第三步驟中,兩種不同探 勘動機方法的細節會在3.3 做進一步的說明。最後一個步驟,我們利用探勘出來 的動機作精細分段,我們將在3.4 做討論。
圖 3.1:主題分段流程圖。
MIDI Files All-mono Melody
Original Duration
IOI Duration Representatio
Step 2:
Rough segmentation
Parser IOIRough segments
Step 3:
Motive Detection
Motive
Step 2:
Rough Segmentation Step 1:Melody extraction and Representation
Step 4:
Fine Segmentation
Fine segments
Rough segments
Step 3:
Motive Detection
Motive
Step 4:
Fine Segmentation
Fine segments
在進一步說明之前,我們先定義傳統重複樣式。
[定義 3.1]序列 S = (s
1,s2,…,sm),存在一個序列 P=(p1,p2,…,pn) 為 S 的部分序列 (subsequence),表示成 P ⊆ S,如果∃ i, 0 ≤ i≤ m-n+1,使得 p1=si, p2=si+1…, pn =si+n-1 。反之,我們以P⊄S 表示。
[定義 3.2]對於序列 P ⊆ S,存在 P’ ⊆ S,p
1=p’1, p2=p’2, …,pn=p’n。且∃ i, j, 0 ≤ i, j≤m-n+1,i ≠ j,使得 p1=si, p2=si+1…, pn = si+n-1,p’1=sj, p’2=sj+1…, p’n = sj+n-1。我們 稱P 為 S 中的 Exact 重複樣式。
[定義 3.3]序列 P 為 S 中一個 Exact 重複樣式,存在一個集合 PS={ ps
1,ps2,…,psk },∀ps∈PS,0 ≤ ps≤ m-n+1,使得 p1=sps,p2=sps+1,…,pn=sps+n-1。k 為 P 在 S 中的 Support,
我們以Support(P)=k 表示。
[定義 3.4]給定一 Minimum support 值 ms,如果序列 P 在 S 中的支持度 k ≥ ms,
則P 稱之為 S 的頻繁重複樣式(Frequent repeat pattern)。
[定義 3.5]當 P ⊆ S,P 為 S 的 Frequent repeat sequence pattern,∀P’ ⊆ S,P≠P’,P’
為S 的 Frequent repeat sequence pattern,P ⊄ P’。我們稱 P 為 Maximal 重複樣式。
[定義 3.6]當 P ⊆ S,P 為 S 的 Frequent repeat sequence pattern,∀P’ ⊆ S,P≠P’,P’
為S 的 Frequent repeat sequence pattern,P ⊄ P’且 Support(P)≠Support(P’)。我們稱 P 為 Non-trivial 重複樣式。
3.1 主旋律的萃取與表示法
MIDI 檔案是以 Binary 的格式儲存資料,在 1.3 中我們已經詳加介紹過 MIDI 的 儲存格式。Binary 的格式並不容易直接處理,所以我們利用 MIDI parser 將 MIDI 檔案剖析成其他較容易使用的資料格式。如圖 3.2 所示,我們所使用的 MIDI parser 會將 MIDI 檔案的 Binary 資料轉換成文字型態的資料。
MIDI 檔案並不是直接紀錄音符的資訊,而是紀錄許多個 Events,包含 MIDI 的系統資訊與音符的資訊等。一個音符利用兩種特定的 Events,Onset event 與 Offset event 分別來表示開始演奏與結束演奏。所以,我們將 Events 的資訊,轉
換成音符的資訊,以音符的序列表達音樂。我們將MIDI 檔案轉成以音符表示的 序列<note1, note2, …, notem>,每個 notei表示一個音符,包含有(onseti, pitchi, di)。
onseti表示音符開始發聲的時間;pitchi代表音高;di代表音長。
Track 1:
tick 0: Sequence/Track Name: Right Hand tick 0: channel 2: program change 3
tick 386: channel 2: note On 60 velocity: 127 tick 435: channel 2: note Off 60 velocity: 0 tick 576: channel 2: note On 60 velocity: 127 tick 769: channel 2: note Off 60 velocity: 0 tick 770: channel 2: note On 64 velocity: 127 tick 943: channel 2: note Off 64 velocity: 0 圖 3.2:經過 Parser 處理後的 MIDI 資料。
例如圖 3.2 經過 MIDI Parser 處李後的資料,我們以音符表示的結果為<(386, 60, 49), (576, 60, 193), (770, 64, 173) >。針對(386, 60, 49),圖 3.2 中我們可以找 出tick 386 是音高 60 開始發音的時間,接著 tick 435 是音高 60 結束發音的時間,
所以我們可以計算出60 這個音的音長為 49 個 Tick time。另外兩個音符(576, 60, 193)與 (770, 64, 173)分別是由 tick 576、tick769 與 tick770、tick 943 所決定。圖 3.2 中的兩個Tick 0 events 與音樂內容沒有直接關係的資訊。
一般音樂包含的內容有主旋律以及伴奏。為了能夠探勘出音樂的主題,我們 必須針對主旋律的部分做擷取。因此,我們需要將主旋律從原始音樂資料中擷取 出來。而且,音樂的主旋律不完全固定在同一個MIDI track 中演奏,可能會再多 個MIDI tracks 裡輪流出現。所以我們在轉換 MIDI events 表示法成音符表式的序 列時,同時對音樂做主旋律擷取。主旋律是作曲家希望呈現的主題,而伴奏只是 為了襯托或修飾主旋律的部分。通常主旋律會比伴奏明顯,因此我們要將音樂中
較明顯的音符擷取出來當作主旋律。由於大部分的音樂會同時包含主旋律與伴 奏,我們在對音樂主題資料做分析時,不需要去考慮伴奏的部分。
主旋律擷取是參考 Uitdenbogerd [46] 等人擷取主旋律的方法,她們提出了 All-mono、Entropy-channel、Entropy-part 與 Top-channel。All-mono 的方法將一 首音樂的所有MIDI tracks 資料結合成一個,此時會有許多音符有重疊在一起。
然後保留同時開始發音中,音高最高的音符作為主旋律。Entropy-channel 方法是 計算各別MIDI track 的 Entropy,保留 Entropy 最高的 MIDI track 當作主旋律。
Entropy-part 的方法是將每一個 MIDI track 以固定長度,如:一個小節,切成多 個部份,擷取主旋律時,選擇 Entropy 最高的部份。Top-channel 的方法與前面 一個方法相似,同樣將每一個 MIDI track 以固定長度切成多個部份,選擇平均 音高最高的部份當作主旋律。根據Uitdenbogerd 實驗的結果,以 All-mono 方法 擷取出來主旋律效果最好。所以,我們修改All-mono 的方法來做主旋律的擷取。
原本 All-mono 的擷取方法是不考慮發聲音符音長,而我們修改成考慮發音 的音長。如圖 3.3 所示,a 的部份表示兩個聲部,以原本 All-mono 的方法從這兩 個聲部擷取出主旋律,最後會得到b 的結果。由圖 3.3 第二與第三小節我們可以 觀察到,這個方法並沒有考慮一個音符持續發音的情形。舉例來說,a 的兩個聲
圖 3.3:All-mono 的範例。
a
b
c
部中,高音的聲部在第二小節的第一個音符為兩拍的音符,這個音符會持續發音 至第二小節的第二個音開始發音為止。All-mono 的方法並不會考慮持續發音的 狀況,只考慮同一時開始發音的音符。這樣一來主旋律會被其他伴奏的聲部影響。
我們修改原本的方法加入考慮持續發音的情形,原本a 的兩個聲部擷取主旋 律的結果,會如圖 3.3 中 c 的結果。圖 3.4,長條代表一個音符,虛線處代表新 的 Event 發生。一個音樂序列,如果以我們修改的 All-mono 方法做主旋律擷取 時,必須考慮虛線上,所有 Event 所發生的改變。經過我們修改的 All-mono 方 法,最後找出的主旋律為圖 3.4 中,有顏色的部分。
我們修改後的做法如下。首先,將一首MIDI 檔案的所有 MIDI Tracks 合成 一個MIDI Track。接著我們依時間順序處理 MIDI Track 中 Event 的資料。只要 有新的Onset event 或 Offset event 發生時,就必須重新檢查目前的最高音,並且 記錄下來。如圖 3.4 所示,每一個長條代表一個音符,虛線的地方代表 Onset 或 Offset Events 發生處,最高音的改變都只會在新的 Event 發生處。如此,我們對 同一時間的Event 做處理,也將每一個發音的音長考慮進去。最後,我們可以得 到一個序列 S = <note1, note2, …, notem>表示音樂的主旋律。圖 3.5 是我們所修改 的All-mono 演算法,我們依時間的順序,處理經過 MIDI parser 剖析的資料,找 出屬於主旋律的音符。我們先選擇出目前發音的音符中,最高的音。然後用目前 Onset 與 Offset 的 Events 去設定發音音符的狀態。如果最高的音符已經結束發音
圖 3.4:All-mono 主旋律擷取示意圖。
Pitch
Time
或者最高的音符改變,則輸出前面我們所選擇的最高音符到結果的序列中。
擷取出來的主旋律,我們又分別以兩個不同的旋律表達方法做處裡。第一 種,用原始音長表示主旋律節奏資訊的Original duration representation。第二種,
用Inter Onset Interval 的方法表示主旋律節奏資訊的 IOI duration representation。
在擷取主旋律的步驟之後,我們計算主旋律中,連續兩個音發生的時間間距。以
<(386, 60, 49), (576, 60, 193), (770, 64, 173) >為例,(386, 60, 49)與(576, 60,193)兩 個音的開始發生時間間距為576 – 386 = 190。所以,我們原本音符的資料(386, 60, 49),以 IOI duration representation 的表達方法表示為(386, 60, 190)。
Algorithm Modified All-mono Melody Extraction
Input: MIDI File E=[e1,e2,…,en] // each ei contains time, event type, pitch Output: Melody S
1. set CurrentTime to e1.time; set CurrentEventList to empty;
2. set OnsetList to empty; // store current onset notes in OnsetList 3. for each event ei of E do
4.
if e
i.time = CurrentTime then AddtoCurrentEventList(ei);5.
else
6.
set TopPitch = the top pitch of OnsetList;
7.
setOnsetList();
8.
if TopPitch isn’t in OnsetList then append TopPitch to S;
9.
set CurrentTime to e
i.time;10.
set CurrentEventList to empty;
11. AddtoCurrentEventList(ei);
12. end 13. end
14. set TopPitch = the top pitch of OnsetList;
15. setOnsetList();
16. if TopPitch isn’t in OnsetList then append TopPitch to S;
17. return S;
Function setOnsetList
1. for each event ej of CurrentEventList do
2.
if
ej.type = Offset then remove ej.pitch from OnsetList;3.
else add
ej.pitch to OnsetList; end 4. end圖 3.5:All-mono 演算法。
3.2 粗略分段
一般傳統的作法在探勘動機時,大都是直接對整首音樂序列探勘音樂的重複樣 式。但是,大部分的重複序列可能不是音樂的動機。在一般音樂作曲中,作曲者 常常會讓音樂段落直接的重複,會讓音樂段落內的所有子序列都有重複的情形發 生 。 為 了 減 少 這 種 情 況 , 我 們 可 以 先 針 對 音 樂 做 粗 略 的 分 段(Rough segmentation),產生粗略段落(Rough)再從這些段落中探勘出音樂動機。
如圖 3.6 為例,(a)、(b)與(c)所標示的皆為重複兩次的序列。(a)所標示部分 為音樂的動機部分;(b)所標示的部分不是動機;(c)所標示的部分為由動機所構 成的主題主要部分,而且(c)為一個 Maximal 的重複樣式,也就是不被其他重複 樣式所包含的樣式。由(c)的部分我們可以觀察到,(a) 與(b)都被包含在內,此外 (a)動機也在(c)裡面以 Pitch Interval Repeat 變化的形式出現。由於作曲者會將大 部分主題段落重複安排出現,加深聽眾的印象,如圖 3.6 的(c)。所以,我們可 以先將這些主要部分用探勘 Maximal 重複樣式的方法先探勘出來,接著對於每 個 Maximal 重複樣式再以探勘動機的方法找出動機。我們使用探勘 Non-trivial 重複樣式的方法,來從音樂中探勘粗略段落。
圖 3.6:音樂中的重複樣式。
(a)
(c) (b)
3.2.1 以 Non-trivail 重複樣式作粗略分段
我們以音樂序列的 Non-Trivial 重複樣式為粗略的分段,我們修改 2.4.1 中 Hsu 所提出探勘頻繁重複樣式的 Correlative matrix 方法。Correlative matrix 做法 主要分成三個步驟,第一,建立Correlative matrix,Correlative matrix 主要在標 示同一個序列中,有重複出現樣式的位置,並且紀錄序列的長度。第二,產生候 選重複樣式,由於Correlative matrix 沒有辦法針對所有可能長度的重複樣式做紀 錄,所以,必須使用Correlative matrix 所記錄的資訊,將其他候選序列也產生出 來。第三,驗證每一個候選重複樣式是否超過Minimum support,保留合乎需求 的重複樣式。
我們主要修改第二個步驟與第三步驟,以符合找出粗略分段的需求。我們修 改第二個步驟中,產生所有可能長度的候選序列的部份,因為我們只需要音符數 量超過一定長度的重複樣式,比如說:只有一個音符的Non-trivial 重複樣式不需 要被產生出來,因此我們不需要產生所有的候選重複樣式。第三個步驟,除了檢 查是否符合Minimum support,我們還增加檢查一個重複樣式的時間長度是否符 合我們的需求。以上兩個修改的部份,詳細的方法會再下一章討論。接下來,我 們以一個範例來簡單介紹使用這個方法找出音樂的粗略分段。我們先分別介紹第 二與第三個步驟原本的作法,然後再個別介紹我們所做的修改。根據第二步驟原 來的作法,所有可能長度的重複序列都必須被探勘出來。為了讓探勘出來的重複 樣式都是Non-trivial 的重複樣式,這個方法還會標記重複樣式出現的次數以及被 其他重複序列包含的次數。因此,對Correlative matrix 的每個元素 Di,j,有四種 不同的處理情形。第一種情形,當Di,j=1 且 Di+1,j+1=0 時,表示發生一個長度為 1 的重複樣式,而且這個樣式不會被其他樣式包含。第二種情形,當Di,j = 1 且 Di+1,j+1
≠ 0,表示發生一個長度為 1 的重複樣式,而且這個樣式被其他樣式所包含。第 三種,Di,j > 0 且 Di+1,j+1 ≠ 0,表示發生一個長度為 Di,j的重複樣式,以及所有的 Suffix 都是重複樣式。而且 D ≠ 0,表示所有的重複樣式都會被更長的樣式
所包含。第四種,Di,j > 0 且 Di+1,j+1 = 0,表示發生一個長度為 Di,j,而且不會被其 他序列所包含的重複樣式,以及所有的Suffix 都是重複樣式。
然而,我們所需要的是 Maximal 的重複樣式。因此,我們在第二步驟的四 種情形只要考慮在Correlative matrix 中,Di,j > 0 而且 Di+1,j+1 = 0 這些位置上的重 複樣式,以產生較少的候選重複樣式。而第三個步驟,除了原本檢查重複次數是 否符合Minimum support 之外,我們加進重複樣式的長度限制,以過濾掉沒有意 義的較短序列。最後,輸出符合這兩個條件的重複序列作為結果。
詳細的演算法如下。首先,第一個步驟,利用音樂主旋律的序列S,建立一 個Correlative Matrix D。演算法如圖 3.7 所示,對於所有的 si屬於S,檢查 sj(j >
i)是否為重複出現的音符,並且累計目前連續重複出現的序列長度。
第二個步驟,我們只需要找出音符數量大於一定 Maximal 的重複樣式,對 於Correlative matrix 我們只需要考慮下面的一種情形。當 D 中的一個元素 Di,j >
0,而且 Di+1,j+1 = 0。對應到原來的序列 S,Di,j指的是一個重複樣式的端點。我 們就可以利用 Di,j的值,倒推出一個重複樣式 P 開始於 S 的第 i-Di,j+1 個位置結 束在第i 個位置。演算法如圖 3.8 所示,我們先把所有符合上述條件的序列找出 來,然後找出所有可能的 Maximal 重複樣式,然後再經過檢查重複樣式的長度 與出現次數是否符合Minimum support,輸出最後結果。
Algorithm Construct Correlative Matrix Input: Melody S
Output: Correlative Matrix D 1. Initialize D
2. for each si of S do 3.
for each s
j of S do4.
if si = sj then D
i,j = Di-1,j-1 + 1; end 5.end
6. end 7. return D;
圖 3.7:建立 Correlative matrix 的演算法[16]。
[範例 3.1] 以歌曲“小蜜蜂”為例,一個音符以(p
i, di)表示,其中 pi 代表音高,di代表音長。在這裡音高以音樂的音名表示,音長以一拍為單位音長1。“小蜜蜂”
主旋律的序列可以表示為<(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)>。假設探勘重複序列參數 m 的值為 2 個小節,Minimum support 為 2。我們可以建立一個 Correlative matrix 如圖 3.9 所示。在Di,j > 0 且 Di+1,j+1 = 0 為一個重複樣式的結尾,我們可以找出下面幾種重 複樣式,<(67, 1)>、<(64, 1)>、<(65, 1)>、<(62, 1)>、<(67, 1), (67, 1)>與<(67, 1), (64, 1), (64, 2), (65, 1), (62, 1), (62, 2), (60, 1)>等樣式。接著,我們從這幾個樣式中 選出Maximal 的重複樣式,得到<(67, 1), (67, 1)>與<(67, 1), (64, 1), (64, 2), (65, 1), (62, 1), (62, 2), (60, 1)>。此外,我們加入長度的限制,去除總長度短於 2 小節的
Algorithm Find Repeating Patterns
Input: Correlative matrix D, shortest length m of one segment Output: Repeating patterns with constrain
1. set PatternList to empty 2. for each di,j of D do
3. if di,j > 0 & di+1,j+1 != 0 then
4.
add all suffix of P = <(s
i-di,j+1, si-di,j+2,…,si> to PatternList;5. end
6.
if d
i,j != 0 & di+1,j+1 = 0 then7.
add P = <(s
i-di,j+1, si-di,j+2,…,si> to PatternList;8.
end
9. end10. MaximalPatternList = all maximal patterns of PatternList;
11. for each pi of MaximalPatternList do 12.
if p
i length less than m measures then 13.remove p
i from MaximalPatternList;14.
else if frequent of p
i < minimum support then 15. remove pi from MaximalPatternList;16.
end
17. end18. return MaximalPatternList;
圖 3.8:修改的探勘候選 Non-trivial 重複樣式演算法,與檢驗 Non-trivial 重複 樣式規則。
重複序列,<(67, 1), (67, 1)>會被去除掉。最後一個步驟,我們會檢查重複樣式是 否符合 Minimum support 值。最後我們得到一個 Segment 結果<(67, 1), (64, 1), (64, 2), (65, 1), (62, 1), (62, 2), (60, 1)>。
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 67,1 − 1 1 1 1 1
64,1 − 1 2 1
64,2 − 3
65,1 − 1 4
62,1 − 1 5
62,2 − 6
60,1 − 7
62,1 − 1
64,1 − 1 1
65,1 − 1
67,1 − 1 1 1 1 67,1 − 1 1 2 67,2 − 67,1 − 1 1 64,1 − 1
64,2 − 65,1 − 62,1 − 62,2 − 60,1 − 64,1 − 67,1 − 1 67,1 − 60,2 −
圖 3.9:Correlative Matrix 範例。
3.3 動機偵測
我們將介紹兩種從粗略分段的結果中探勘動機的方法。第一種方法,根據Stein[41]
提出作曲者常用的六種動機處理變化特性。我們利用這些特性修改傳統探勘重複 序列的方法來探勘動機。第二種方法,利用Local boundary detection model 的方 法,對音樂中所有連續的音符,以數種音樂的特徵值計算出 Boundary strength
value,代表兩個音之間落差的大小。根據計算的結果,選擇 Boundary strength value 高的地方當作分段點。利用這些分段點,將音符群組成許多小段。然後,
以群組的小段為單位,找出可能的序列當作動機。
根據Stein[41]提出常用的六種動機處理變化特性,分別敘述如下。
1. Exact repeating:是動機常見的變化,如圖 3.10 所示。利用反覆的處理,作 曲者可以讓聽眾加深對主題動機的記憶。
2. Pitch interval repeating:Pitch interval 是指兩個連續音符的音高差。Pitch interval repeating 在音樂的意義是 Transposition。圖 3.11 為 Pitch interval 重複 的範例,純粹看音高時,方框所標示的地方不算重複出現。但是,我們以Pitch interval 來看,我們就可以知道方框標示的地方是一個重複樣式。
3. Sequence(模進):模進是連續三個以上的動機 Transposition,而且每個 Transposition 不相同,但是必須是相同的升降方向。圖 3.12 為 Sequence 變 化的例子,第一個小節內是原始的動機,接著連續兩個Transposition 變化。
4. Contrary motion(反相):反相動機處理為保持動機的節奏,但是將旋律反相進 行。旋律的反相進行指的是,將動機Pitch interval 的值,全部取負號。如圖 3.13 所示,第一小節動機的 Interval 為<1, 1, 1, -2, 1, -2>,第二小節的反相變 化後的Tonal interval 為<-1, -1, -1, 2, -1, 2>。
圖 3.10:Exact repeating patterns 的範例。
圖 3.11:Interval repeating patterns 的範例。
Pitches:|67 64 64|65 62 62|60 62 64 65|67 67 67| ……|
Pitch Interval:|-3 0 1|-3 0 -2|2 2 1|2 0 0|…..|
5. Retrograde(逆行):逆行的動機處理是維持原始節奏,將音高倒過來排列。如 圖 3.14 所示,第一小節為原始動機,第二小節為逆行的動機變化。整個動 機的節奏並沒有改變,音高由原來的<65, 65, 67, 71, 72, 72>變為<72, 72, 71, 67, 65, 65>。
6. Augmentation or Diminution:作曲者在使用增值或減值的動機處理時,會保 留原始的旋律,將動機的節奏依比例加快或減慢,也就是延長或縮短動機所 有音符的音長。如圖 3.15 所示,第一小節為原始動機,第二、三小節為增 值的動機,第四小節為減值的動機。
圖 3.12:Sequence 變化的範例。
圖 3.13:Contrary Motion 變化的範例。
圖 3.14:Retrograde 變化的範例。
圖 3.15:Augmentation 與 Diminution 變化的範例。
Augmentation Diminution
接下來,我們先介紹第一種探勘動機的方法以下我們對探勘動機方法修改的 部份做介紹。首先,我們先定義表示音樂特徵資料的符號。
M:代表一段單聲部的動機,記錄有 k 個音符,k ≥ 1,| M | = k;每一個音符 記錄一組(pi, di),使得 M = <(p1, d1), (p2, d2),…, (pk, dk)>。
Mint:代表動機 M 的音高部份以 Pitch interval 來表示,每一個音符記錄一組 (inti, di),使得 Mint=<(int1, d1), (int2, d2),…, (intk-1, dk-1)>,k ≥ 1,k = |M|。
i, j:代表音符在動機中的順序。
pi:代表一個音符的音高,以半音為單位,根據MIDI 所制定的規格,1≤ pi
≤128。
di:代表一個音符的音長或IOI,以 MIDI 的 Tick time 為計算時間的單位。
inti:代表前後兩個音的音程差,inti = pi+1 - pi。
Exact Repeating
給定一個 M = <(p1, d1), (p2, d2),…, (pk, dk)>,利用反覆的規則,可以產生 M’ = <(p1’, d1’), (p2’, d2’),…,(pk’, dk’)>,且 pi=pi’,di=di’,0 < i ≤ k。我們利用原始音樂的資 料建立 Correlative matrix,然後利用 Correlative matrix 探勘經常重複序列。
Correlative matrix 建立的演算法如圖 3.16 所示。在第 3.2.1 節,我們利用 Algorithm Construct Correlative Matrix for Exact repeating
Input: Melody S
Output: Correlative Matrix D 1. Initialize D
2. for each si of S do 3.
for each s
j of S do4.
if si = sj then D
i,j = Di-1,j-1 + 1; end 5.end
6. end 7. return D;
圖 3.16:Exact repeating 動機變化的 Correlative matrix 演算法。
Correlative matrix 的方法找出音樂中 Maximal 的重複序列。所以,我們只考慮 Correlative matrix 中,Di,j > 0 且 Di+1,j+1 = 0 的情形。但是,在探勘動機的部分,
我們必須對於四種情形全部考慮。
Pitch Interval Repeating
我們直接將音樂轉換成Pitch interval 的表示方法,探勘出 Interval repeating patterns。給定一個 M 的 Mint=<(p1, d1), (p2, d2),…, (pk-1, dk-1)>,利用反覆的規則,
可以產生 Mint’=<(int1’,d1’), (int2’,d2’),…, (intk-1’,dk-1’)>,且 inti=inti’,di=di’,0 < i ≤ k。我們將主旋律產生出來的 Pitch interval 序列,同樣以 Correlative matrix 的方 法探勘。我們直接將 Pitch interval 序列使用圖 3.16 的演算法建立 Correlative matrix。
根 據 Zinn[50] 指 出 , Transposition 又 分 為 Real transposition 與 Tonal transposition 兩種。這兩個差異主要源自於 Musical scale 中有 Naturally occurring half steps 所帶來的影響。Real transposition 不需要考慮 Naturally occurring half steps 的影響,只要保持原來的音程差,而 Tonal transposition 必須調整音程差,
使其符合Musical scale 中,Naturally occurring half steps。因此,我們在轉換原始 音樂為Interval 時,分別轉換成 Real interval 與 Tonal interval。
圖 3.17 為兩種 Transposition 的範例,以 MIDI 所記錄的音高來看,第一小 節動機的音高序列為<64, 65, 64, 62, 67>;Pitch interval 的序列為<1, -1, -2, 5>。第 二小節Real transposition 的音高序列為<62, 63, 62, 60, 65>;Pitch interval 的序列 為<1, -1, -2, 5>。第三小節 Tonal transposition 的音高序列為<62, 64, 62, 60, 65>;
Pitch interval 的序列為<2, -2, -2, 5>。
Tonal interval 會受到音樂的 Musical scale 所影響。在音樂中,以 Key signature 標記一個Musical scale 的起始音。Key Signature 以 Music alphabet 來記錄,如所 示。一般我們最常見到的音樂Key Signature 為 “C”,如圖 3.18 中的 Diatonic Scale 就是以“C” (do)這個音為起始。Key Signature 為“C”的音程為:全音(whole step)、
全音、半音(half step)、全音、全音、全音、半音。如果,Key Signature 為“G”(sol),
音程為全音、全音、半音、全音、全音、半音、全音。所以我們會針對不同的 Musical scale 計算主旋律的 Tonal interval。
Sequence
Sequence 與前一節提到的 Transposition 一樣會有 Real transposition 與 Tonal Transposition 的情形。給定一個動機 M 的 Mint=<(int1, d1),(int2, d2),…,(intk-1, dk-1)>,
利用Sequence 的動機變化規則產生 M1, M2,…,ML連續的Ascending 或 descending 序列,L ≥ 2。對於所有 1 ≤ l ≤ L,Mlint=<(intl1, dl1),(intl2, dl2),…,(intlk-1, dlk-1)>,且 inti = intli, di =dli,1 ≤ i < k。建立 Correlative matrix 的方法同於 Pitch interval repeating。
圖 3.12 整首音樂如果以 Tonal interval 的表示法,60 ticks 為 1 拍,30 ticks 為半拍,可以表示為< (1, 60), (-1, 30), (-1, 30), (3, 60), (-3,60), (1, 60), (-1, 30), (-1,
圖 3.17:兩種 Transposition 的範例。
圖 3.18:自然音階。
do
1 1 1/2 1 1 1 1/2 re mi fa sol la ti do C D E F G A B C Syllable:
Alphabet:
Interval:
Real Transposition Tonal Transposition Original Motive
30), (3, 60), (-3, 60), (1, 60), (-1, 30), (-1, 30), (3, 60) >。由這個序列可以建立如圖 3.19 的 Correlative Matrix,建立的方法與前面探勘頻繁重複樣式的方法相同。接 著,利用Correlative matrix 的資料來產生符合 Sequence 動機變化的序列。
產生序列的方式與小節的方法相同,找出所有Exact repeat 的序列。接著,
我們必須針對每個序列檢查是否有連續出現的情形。由於前一個步驟產生 Exact repeat 的序列時,我們會記錄對應原始序列的位置。所以,我們直接檢查序列的 發生位置是否有符合連續的情形,將符合Sequence 特性的序列輸出。
1,60 -1,30 -1,30 3,60 -3,60 1,60 -1,30 -1,30 3,60 -3,60 1,60 -1,30 -1,30 3,60 1,60 − 1 1
-1,30 − 1 2 1 2 1
-1,30 − 1 3 1 3
3,60 − 4 4
-3,60 − 5
1,60 − 6
-1,30 − 1 7 1
-1,30 − 1 8
3,60 − 9
-3,60 −
1,60 −
-1,30 − 1
-1,30 −
3,60 −
圖 3.19:針對 Sequence 變化所建立的 Correlative matrix。
Contrary Motion
給定動機 M 的 Mint=<(int1, d1), (int2, d2),…, (intk-1, dk-1)>,利用 Contrary Motion 可 以產生出 M’=<(int1’, d1’), (int2’, d2’),…, (intk-1’, dk-1’)>,其中 inti=-inti’,di=di’,0 <
i ≤ k-1。為了能夠找出 Contrary Motion 的 Repeating patterns,我們修改 Correlative Matrix 建立的方法。由於 Correlative Matrix 是記錄序列資料有重複的部份,所以 我們利用原始序列與反相處理過的序列來建立 Correlative Matrix,如圖 3.20 所 示。
-4,15 1,15 1,15 1,15 -2,15 1,15 -2,15 4,15 3,30 -1,30 1,30 -2,30 3,15 -1,15 -1,15 -1,15 2,15 -1,15 2,15
4,15 - 1
-1,15 - 1 1 1 1
-1,15 - 1 2 2 1
-1,15 - 1 2 3 1
2,15 - 4 2
-1,15 - 1 1 1 5
2,15 - 2 6
-4,15 -
-3,30 -
1,30 - 1
-1,30 -
2,30 -
-3,15 -
1,15 -
1,15 -
1,15 -
-2,15 -
1,15 -
-2,15 -
圖 3.21:針對 Contrary motion 變化所建立的 Correlative matrix。
圖 3.13 前二十個音符的 Tonal interval 序列,以 60 ticks 為一拍,可以表示 成<(-4, 15), (1, 15), (1, 15), (1, 15), (-2, 15), (1, 15), (-2, 15), (4, 15), (3, 30), (-1, 30), (1, 30), (-2, 30), (3, 15), (-1, 15), (-1, 15), (-1, 15), (2, 15), (-1, 15), (2, 15)>與反相處
Algorithm Construct Correlative Matrix for Contrary motion Input: Melody S
Output: Correlative Matrix D 1. Initialize D
2. S’=contrary of S;
3. for each si of S do
4.
for each s
j’ of S’ do5.
if s
i = sj’ then Di,j = Di-1,j-1 + 1; end 6.end
7. end 8. return D;
圖 3.20:Contrary motion 動機變化的 Correlative matrix 演算法。
理的序列<(4, 15), (-1, 15), (-1, 15), (-1, 15), (2, 15), (-1, 15), (2, 15), (-4, 15), (-3, 30), (1, 30), (-1, 30), (2, 30), (-3, 15), (1, 15), (1, 15), (1, 15), (-2, 15), (1, 15), (-2, 15)>。圖 3.21 為利用前述兩個序列所建立的 Correlative Matrix,我們同樣可以利用這個 Correlative Matrix 找出反相序列的樣式。
Retrograde
給定一個 M=<(p1, d1),(p2, d2),…,(pk, dk)>,利用逆行的規則,可以產生 M’=<(p1’, d1’),(p2’, d2’),…,(pk’, dk’)>,且 pi=pk-i+1’,di=di’,0< i ≤ k。同樣的,我們修改 Correlative matrix 的建立方法,來探勘出逆行的動機變化,如圖 3.22 演算法所 示。
我們以相反的方向來計算Correlative matrix,如圖 3.23,以 60 ticks 為一拍。
原來建立Correlative Matrix 時,Di,j會參考Di-1,j-1的值做累加,在處理Retrograde
時,每個Di,j需要參考Di+1,j+1來做累加。利用建立出來的Correlative matrix 可以
探勘出 Retrograde 的動機變化。在原本方法中,Di,j有四個不同情形的處理。在 這裡我們修改原本建立Correlative matrix 的方法後,原本的 Di,j條件必須做改變。
所以,我們將第一種情形的條件改為Di,j = 1 且 Di-1,j+1 = 0;第二種情形改為 Di,j = 1 且 Di-1,j+1 ≠ 0;第三種情形改為 Di,j > 1 且 Di-1,j+1 ≠ 0;最後一種改為 Di,j > 1 且 D = 0。
Algorithm Construct Correlative Matrix for Retrograde Input: Melody S
Output: Correlative Matrix D 1. Initialize D
2. S’=retrograde of S;
3. for each si of S do
4.
for each s
j’ of S’ do5.
if s
i = sj’ then Di,j = Di-1,j-1 + 1; end 6.end
7. end 8. return D;
圖 3.22:Retrograde 動機變化的 Correlative matrix 演算法。
65,60 65,30 67,90 71,90 72,30 72,120 72,60 72,30 71,90 67,90 65,30 65,120
65,60 - 1 1 1
65,30 - 2 1
67,90 - 3
71,90 - 4
72,30 - 1 1 5
72,120 - 6 1
72,60 - 1
72,30 -
71,90 -
67,90 -
65,30 -
65,120 -
圖 3.23:針對 Retrograde 變化所建立的 Correlative martrix。
Augmentation or Diminution
給定動機 M 的 Mint=<(p1, d1),(p2, d2),…, (pk, dk)>,利用增減值的處理可以得 M’=<(p1’, d1’), (p2’, d2’),…,(pk’, dk’)>,而且 pi = pi’,di = m·di’,k ≥ 1,m > 0。
由於增、減值的動機變化不會改變動機的旋律,只會改變動機的音長。所以 我們在建立Correlative matrix 時,純粹考慮音高的資訊來建立。接下來,產生重 複序列時,我們會檢查序列音長是否有以相同的比例增長或縮短。從Correlative matrix 中,我們可以透過座標得知序列比對成功的位置。所以,我們可以計算比 對的序列與被比對的序列,兩者的音長是否呈固定的比例。
Integration of Motives
我們分別利用上述六種方法探勘出動機後,必須將所有的結果整合使用。我們將 序列表示方法,轉換回原始序列以音高與音長表示的資料。接著,從所有動機的 序列中,找出 Maximal 的重複序列。最後保留下來的重複序列,我們分別記錄
各個動機以不同動機變化出現的次數,以及紀錄一個序列總音長。
此外,我們會將一種由兩個不同音高的音符,快速的交替彈奏的序列刪除,
如圖 3.25 所示。這種序列在音樂中,通常是扮演裝飾的角色,與主題無關。
64,60 65,30 64,30 62,60 67,60 64,120 65,60 64,60 62,120 67,120 64,30 65,15 64,15 62,30 67,30
64,60 - 1 1 1 1 1
65,30 - 2 2
64,30 - 1 3 1 3
62.60 - 4 4 67,60 - 5 5
64,120 - 1 6 1
65,60 - 7 64,60 - 1 8 62,120 - 9 67,120 - 10
64,30 - 1 65,15 - 64,15 - 62,30 - 67,30 -
圖 3.24:針對 Augmentation 或 Diminution 變化所建立的 Correlative martrix。
3.4 精確分段
前面我們將音樂作粗略的分段後,從這些粗略段落中,再探勘出音樂的動機。接 下來,我們會利用動機與粗略分段的結果找出精確的段落。根據動機探勘的結 果,我們保留存在有動機的粗略段落,將完全沒有探勘出動機的粗略段落刪除。
此外,保留下來含有動機的粗略段落,我們會進一步做合併的動作。接下來,我 圖 3.25:兩個音快速的交替演奏。
們介紹決定Fine segmentation 的幾個步驟。
首先,刪除不包含任何動機的粗略分段。第二,我們利用動機以及粗略段落 的結果,對粗略段落做 Split 與 Merge,找出同一個動機所構成的段落,我們稱 之為Theme segments。 第三,音樂中除了 Theme segments 以外剩下的段落,我 們稱之為Non-theme segments。我們將長度超過一定量的 Non-theme segment,也 定成一個Theme segment。
在第一個步驟中,我們會刪除沒有包含動機的粗略段落。在探勘動機時,我 們會紀錄各個段落探勘出來的動機。如果一個粗略段落無法探勘出任何的動機,
很可能是因為該粗略段落是屬於伴奏或間奏較為不重要的部份或者沒有一個明 顯的主題,所以我們無法從中探勘出重複出現的動機序列。因此,我們會刪除不 包含動機的段落。
第二個步驟,我們檢查動機在各個粗略段落分佈的情形。首先,我們先介紹 將粗略段落做Split 的情形。如圖 3.26 所示,每一個長條代表一個粗略段落,長 條中顏色所標的的部分為動機或動機變化發生的位置,不同顏色代表不同的動 機。圖 3.26 上方的粗略段落中,包含兩種不同的動機分佈在其中,相同的動機 是連續在一起,中間沒有出現其他動機。在這個情形下,我們將粗略段落做Split,
Split 的切割點在一種動機開始出現的位置上。圖 3.26 下方的粗略段落中,包含 數個不同的動機,而且分散在其中,沒有連續的出現。對於這種情形,我們不會 做Split,而將整個粗略段落當作可能的 Theme segment。接者我們介紹將粗略段 落做Merge 的情形。如圖 3.27 所示,一個長條代表一首完整的音樂,長條中有 顏色所標示的部分代表不同的粗略段落,相同顏色的粗略段落代表由相同的動機 所構成。圖 3.27 上方的長條中,第一、二、四與五個粗略段落由相同的動機所 構成,第三與第六個粗略段落是由同一個動機所構成。我們檢查相鄰在一定範圍 內的兩個粗略段落是否由同一個動機所構成,如果由相同的動機所構成,我們會 將兩個粗略段落合併為一個,如圖 3.27 下方長條所示。
圖 3.26:兩種動機在粗略段落中分佈的情形。
圖 3.27:合併相同動機的粗略段落。