2010-01-14 136 views
13

我想類似TunaticMidomi建立的東西(試出來,如果你不知道他們在做什麼),我想知道我不得不用什麼算法;這個想法我有這樣的應用程序的工作原理是這樣的:音樂識別和信號處理

  1. 有幾首歌曲
  2. 爲每首歌曲的大數據庫降低質量/比特率(以64kbps的例如),並計算了聲「哈希」
  3. 有你想要找出
  4. 的歌曲再次降低質量/比特率(64kbps的以音樂的聲音/節選),並計算聲「散列「
  5. 如果4.聲音散列在任何2.聲音哈希返回匹配的音樂

我雖然降低了質量/比特率的因環境噪聲和編碼的差異。

我在正確的軌道嗎?任何人都可以提供任何特定文檔或示例? Midori似乎甚至承認hum's,這是非常令人印象深刻!他們如何做到這一點?

是否存在聲音哈希值,還是我剛編好的東西?如果他們這樣做,我該如何計算它們?更重要的是,如何檢查child-hash是否在father-hash

我該怎麼去用Python(也許是內置模塊)或PHP構建一個類似的系統?

一些例子(最好在Python或PHP中)將不勝感激。提前致謝!

+1

相關問題:[聲音樣本識別庫/代碼](http://stackoverflow.com/questions/2817663/sound-sample-recognition-library-code),[聲學指紋opensource?](http:// stackoverflow .COM /問題/ 2462410 /聲學指紋開源)。好[來自MusicBrainz的維基概述](http://wiki.musicbrainz.org/Fingerprinting)。 – Albert 2013-01-15 10:00:27

+0

這是Python的一個很好的選擇:https://github.com/worldveil/dejavu – lollercoaster 2014-07-21 04:40:58

回答

10

我在一個很酷的框架的外圍工作,實現了幾種音樂信息檢索技術。我幾乎不是一個專家(編輯:實際上我沒有接近專家,只是爲了澄清),但我可以告訴我們,快速傅里葉變換在這個東西的所有地方都會使用。傅里葉分析很古怪,但其應用非常簡單。基本上,當您在頻域而非時域分析音頻時,您可以獲得大量有關音頻的信息。這是傅立葉分析給你的。

這可能與您想要做的事情有點偏離。在任何情況下,項目中都有一些很酷的工具可供使用,以及查看核心庫自身的源代碼:http://marsyas.sness.net

+0

我如何檢測是否有人吹口哨到iPhone麥克風..? – iDeveloper 2015-08-30 14:31:50

1

自從我上次做信號處理以來,查看頻域表示(例如FFT或DCT)。然後你可以做一個散列的搜索數據庫歌曲與該序列英寸

棘手的部分是快速搜索(也許一些關於基因搜索的論文可能是有趣的)。我懷疑iTunes也會檢測一些工具來縮小搜索範圍。從音樂中提取

3

MFCC是在尋找歌曲之間的相似性,擊鼓..這是最常用的找到類似的歌曲是非常有用的。正如darren所指出的,Marsyas是一種可用於提取MFCC並通過將MFCC轉換爲單個向量表示來找到類似歌曲的工具。

除了MFCC之外,Rhythm也用於查找歌曲相似度。有在Mirex 2009

介紹幾篇論文,會給你不同的算法和功能,在檢測音樂相似度最有幫助的很好的概述。

+0

MFCC的+1 – keyboardP 2010-01-14 23:55:24

1

我看過一個關於在某個音樂信息檢索服務(沒有提及姓名)做它的方法紙 - 通過計算短時傅立葉變換在音頻的採樣。該算法然後在頻域中挑出「峯值」,即時間位置和頻率特別高的幅度,並使用這些峯值的時間和頻率來生成散列。原來,哈希具有不同樣本之間令人驚訝的幾個碰撞,也反對的峯值信息約50%的數據丟失站起.....

11

我做音樂信息檢索(MIR)的研究。關於音樂指紋的開創性論文是2002年至2002年間由Haitsma和Kalker撰寫的。谷歌應該給你它。

我讀了一篇關於Shazam方法的早期文章(真的很早; 2000年之前)。此時,他們基本上檢測到光譜峯,然後散列峯。我相信程序已經發展。

這兩種方法在信號級別處理音樂相似性,即它對於環境失真是強健的。對於哼唱查詢(QBH),我認爲這不太好。然而,對於不同的(但相關的)解決方案,這是一個不同的(但相關的)問題,所以你可以在文獻中找到解決方案。 (名字太多)

ISMIR程序可以在線免費獲取。你可以找到有寶貴的東西:http://www.ismir.net/

我用像Marsyas現有庫達成一致。取決於你想要的。我想,Numpy/Scipy在這裏是不可或缺的。簡單的東西可以用Python自己編寫。哎呀,如果你需要像STFT,MFCC這樣的東西,我可以給你發郵件給你的代碼。

+1

我知道我忘記了一些東西:音符級的相似性通常是通過計算色度圖來實現的。對於每個時間幀,計算信號中有多少C,C#,D,D#,...,A#,B。因此,色度圖具有12維的尺寸。許多相似性方法使用這個。 – 2010-01-15 15:23:53

+0

感謝您的輸入。你能給我發電子郵件嗎?我很難弄清楚這一點,一些示例代碼會很有用。 – 2010-01-21 21:36:54

+0

@Steve Tjoa有可能檢測到哨聲..? – iDeveloper 2015-08-26 15:46:27

1

目前我正在開發一個使用ActionScript 3的音樂搜索引擎。這個想法是首先分析和絃並標記出頻率劇烈變化的幀(它僅限於mp3文件)(旋律變化並忽略噪音) 。之後,我對輸入聲音做同樣的事情,並將結果與​​倒排文件進行匹配。匹配的人確定匹配的歌曲。

對於阿克塞爾的方法,我覺得你不應該擔心的查詢它是否是一個唱歌或者只是哼唱,因爲你沒有實現語音識別程序。但我很好奇你的使用散列函數的方法。你能向我解釋一下嗎?

1

MusicBrainz project維護這樣的數據庫。您可以根據指紋對其進行查詢。

該項目已經存在了一段時間,並在過去使用過不同的指紋。請參閱here獲取列表。

他們正在使用的最新指紋是AcoustId。有Chromaprint庫(也與Python綁定),您可以在其中創建此類指紋。您必須爲其提供原始PCM數據。我最近在Python中編寫了一個庫,它可以解碼(使用FFmpeg)並提供生成AcoustId指紋(使用Chromaprint)和其他東西(也用於通過PortAudio播放流)的功能。請參閱here

4

我最近移植我的音頻基於地標的指紋系統的Python:

https://github.com/dpwe/audfprint

它可以識別小(5-10秒)摘錄的幾千軌道10S的參考數據庫,並對噪聲和信道失真非常有效。它使用局部譜峯的組合,類似於Shazam系統。

這隻能匹配完全相同的音軌,因爲它依賴於頻率和時間差的細節 - 它甚至不匹配不同的音樂,當然不會覆蓋版本或嗡嗡聲。據我所知,Midomi/SoundHound通過匹配嗡嗡聲來相互作用(例如通過dynamic time warping),然後在一組嗡嗡聲與預期音樂軌道之間有一組人爲策劃的鏈接。

將嗡嗡聲直接匹配到音樂曲目(「通過哼唱進行查詢」)是音樂信息檢索中正在進行的研究問題,但仍然相當困難。您可以看到去年在MIREX 2013 QBSH Results處評估的一組系統的摘要。

0

對於查詢哼唱功能,它比音頻指紋識別解決方案更復雜,困難來自於:

  • 如何有效地收集在真實世界應用的旋律數據庫?許多演示系統都使用MIDI來構建,但是對於一家公司來說,MIDI解決方案的成本極其低廉。
  • 如何處理時間差異,例如,用戶哼聲可能會快或慢。使用DTW?是的,DTW是處理具有時間差異的時間序列的非常好的解決方案,但是它會花費太多的CPU負載。
  • 如何製作時間序列索引?

這是一個哼唱開源項目https://github.com/EmilioMolina/QueryBySingingHumming的演示查詢,可以作爲參考。