比較

2010-05-12 73 views
4

我找的理論,算法和如何比較類似的音樂。更具體地說,我正在研究如何檢查具有不同比特率或可能稍微不同的音樂曲目(收音機與專輯版本),但聽起來是一樣的。比較

此用例包括諸如Grooveshark,Youtube等服務,他們得到很多的重複曲目。我也對文本比較感興趣(布蘭妮斯珀斯和布蘭妮斯皮爾斯,他們偏離了多遠等),雖然這是次要的,我已經有一些來源在這方面繼續。

我在編解碼器無關的比較技術和algoritms最感興趣(假設一個「原始」流),但具體的編解碼資源表示讚賞。

我所知道的項目,如musicbrainz.org,但還沒有進一步研究它,並有興趣,如果這些項目可能是在這方面的幫助。

+0

如果您要編寫一個工具來查看實際的音頻數據:如果您的音樂收藏不是非常小,檢查突然結局(損壞的文件或只是缺少末端的缺陷很難手動查找)當你注意到一首歌曲結束時,如果你正在聽音樂時做其他事情,那麼這是不太可能的) – ThiefMaster 2010-05-12 14:15:45

回答

1

我這裏寫了一個類似的答案:Music Recognition and Signal Processing

在研究界,兩個信號之間找到相似性(達到環保失真,例如噪聲,在拍子,音調,或比特率輕微的變化)的問題被稱爲audio (or music) fingerprinting。這個話題至少十年來一直在研究。這個早期(並經常引用)paper by Haitsma and Kalker清楚地描述了這個問題並提出了一個簡單的解決方案。

找到同一首歌曲的兩個版本之間的音樂相似度的問題被稱爲cover song identification。這個問題也被嚴重地研究,但仍被認爲是開放的。

也許最流行的兩種基於內容的音樂搜索的商業解決方案是MidomiShazam

我相信這個解決你的問題。查看Google Scholar最近解決這些問題的方法。 ISMIR會議程序可在線免費使用。

+0

謝謝,這正是我尋找的答案類型! – 2010-05-20 23:58:39

3

至於比較名稱而言,你可能想看看Levenshtein distance算法。給定兩個字符串,它會計算一個距離度量,可以用作捕獲重複數據的基礎。

我個人的工具,我與該有大量重複它的一個相當大的數據庫的應用程序開發中使用它。結合與我的域相關的一些其他數據比較,我可以將我的工具指向應用程序數據庫,並快速找到許多重複的記錄。不會說謊,我認爲在行動中看到這很酷。

它甚至快速實施,這裏有一個C# version

public int CalculateDistance(string s, string t) { 
    int n = s.Length; //length of s 
    int m = t.Length; //length of t 
    int[,] d = new int[n + 1, m + 1]; // matrix 
    int cost; // cost 

    // Step 1 
    if (n == 0) return m; 
    if (m == 0) return n; 

    // Step 2 
    for (int i = 0; i <= n; d[i, 0] = i++) ; 
    for (int j = 0; j <= m; d[0, j] = j++) ; 
    // Step 3 
    for (int i = 1; i <= n; i++) { 
     //Step 4 
     for (int j = 1; j <= m; j++) { 
      // Step 5 
      cost = (t.Substring(j - 1, 1) == s.Substring(i - 1, 1) ? 0 : 1); 

      // Step 6 
      d[i, j] = System.Math.Min(System.Math.Min(d[i - 1, j] + 1, d[i, j - 1] + 1), d[i - 1, j - 1] + cost); 
     } 
    } 

    // Step 7 
    return d[n, m]; 
} 
+0

我知道這個算法,並且打算用它來清除「容易」的目標,但是一些藝術家有相同的名稱,並且在簡單文本比較不會執行的情況下存在重疊,這就是爲什麼我正在尋找音樂數據特定的域。 – 2010-05-14 11:42:42