2011-08-08 51 views
31

我想以編程方式比較2個音頻文件。 例如:我的iPhone應用程序中有一個聲音文件,然後我錄製另一個。我想檢查現有聲音是否與錄製的聲音相匹配( - 類似於語音識別)。如何以編程方式比較2個音頻文件?

我該如何做到這一點?

回答

24

這就是所謂的音頻指紋。有一些開源項目可以從中獲得一些想法。看看這裏:Audio Fingerprint - MusicBrainz

+0

感謝您的鏈接miamk。但是你試過這個嗎?我不確定,如何實現它。再次感謝 – iscavengers

+14

好吧,如果您正在尋找現成的,複製粘貼的Objective-C代碼或庫以放置在您的iOS項目中,現在可以停止 - 您不會找到那樣的東西(至少在我的知識範圍內)。你必須自己編寫代碼。 – MiguelB

3

聽起來Shazam可能的幫助。

網上有幾篇文章談論這個,其中包括this,我剛纔讀過。

使用Shazam技術進行分析將爲並排比較提供一個很好的起點。

+2

呃?駕車的投票是什麼? – Hyperbole

2
  • 應用帶通濾波器,以降低噪聲
  • 規範化爲振幅
  • 計算互相關

它可以是相當密集兆赫。

的DSP細節是在著名的文字:

  • 數字信號處理通過 阿倫·V·奧本海姆和Ronald W.謝弗
+0

這不會考慮口音和說話速度的差異 –

1

我覺得以及您可以嘗試選擇來自兩個音頻軌道的第二個樣本,使它們在幅度上正常化並且用帶通濾波器並且在嘗試使用相關器之後減少噪聲。

例如,您可能需要5秒鐘的樣本中的一個,並使其滑過第二個樣本,以計算任何時間移位時的交叉相關。 (請小心,如果您服用的包裝太小,您可能會在不期待的情況下產生高度相關性,並且會減弱由於信號剪切和互相關造成的副作用)。 之後你可以收集一個數組與al的互相關結果,並得到maximun的索引。

然後,你應該設置實驗性的決定何時喲假設包裝袋相同。這將根據您正在比較的音軌的質量而改變。

我實現了一個coriaryor來接收和區分無線通信中的前導碼。我的腳本實際上是在matlab中完成的。如果您有興趣,我可以嘗試找到共同部分並將其發送給您。

這將是一個太長的代碼粘貼hene在論壇。如果你想讓我知道,我會盡快將它發送給你。

歡呼聲

4

我知道這個問題已經被問了很久以前,但一個明確的答案可以幫助別人。

  1. 從Echoprint的庫(網址:echoprint.me/start)將幫助您解決以下問題:

    • 去複製一個大集合
    • 識別(軌道,藝術家......)在硬盤或服務器上播放的歌曲
    • 運行帶有您的數據的Echoprint服務器
    • 確定在iOS設備上的PS

    一首歌:對於更注重音樂功能,可以檢查的API here列表。

  2. 如果你想通過自己實現指紋,你應該讀列爲參考文獻here的文檔,大概看看musicip-libofa谷歌代碼

希望這將幫助;)

相關問題