• 沒有找到結果。

第二章 相關研究

3.2 粗略分段

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

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;

們可以觀察到,(a) 與(b)都被包含在內,此外(a)動機也在(c)裡面以 Pitch Interval Repeat 變 化的形式出現。由於作曲者會將大部分主題段落重複安排出現,加深聽眾的印象,如圖 3.6 的(c)。所以,我們可以先將這些主要部分用探勘 Maximal 重複樣式的方法先探勘出來,接 著對於每個Maximal 重複樣式再以探勘動機的方法找出動機。我們使用探勘 Non-trivial 重 複樣式的方法,來從音樂中探勘粗略段落。

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,我們還

圖 3.6:音樂中的重複樣式。

(a)

(c) (b)

增加檢查一個重複樣式的時間長度是否符合我們的需求。以上兩個修改的部份,詳細的方 法會再下一章討論。接下來,我們以一個範例來簡單介紹使用這個方法找出音樂的粗略分 段。我們先分別介紹第二與第三個步驟原本的作法,然後再個別介紹我們所做的修改。根 據第二步驟原來的作法,所有可能長度的重複序列都必須被探勘出來。為了讓探勘出來的 重複樣式都是 Non-trivial 的重複樣式,這個方法還會標記重複樣式出現的次數以及被其他 重複序列包含的次數。因此,對Correlative matrix 的每個元素 Di,j,有四種不同的處理情形。

第一種情形,當Di,j=1 且 Di+1,j+1=0 時,表示發生一個長度為 1 的重複樣式,而且這個樣

Algorithm Construct Correlative Matrix Input: Melody S

Output: Correlative Matrix D 1. Initialize D

圖 3.7:建立 Correlative matrix 的演算法[16]。

然而,我們所需要的是Maximal 的重複樣式。因此,我們在第二步驟的四種情形只要

一定Maximal 的重複樣式,對於 Correlative matrix 我們只需要考慮下面的一種情形。當 D

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

10. MaximalPatternList = all maximal patterns of PatternList;

11. for each pi of MaximalPatternList do 12.

if p

i length less than m measures then

18. return MaximalPatternList;

圖 3.8:修改的探勘候選 Non-trivial 重複樣式演算法,與檢驗 Non-trivial 重複樣式規則。

[範例 3.1] 以歌曲“小蜜蜂”為例,一個音符以(pi, di)表示,其中 pi 代表音高,di 代表音長。 可以找出下面幾種重複樣式,<(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 小節的重複序列,<(67, 1), (67, 1)>會被去除掉。最後一個步驟,我們會檢查重複樣式是否符合 Minimum support 值。

最後我們得到一個Segment 結果<(67, 1), (64, 1), (64, 2), (65, 1), (62, 1), (62, 2), (60, 1)>。

圖 3.9:Correlative Matrix 範例。

相關文件