2015-11-02 68 views
1

我試圖在兩個音頻文件中找到任何匹配內容的時間範圍。一個使用的例子是:查找兩個壓縮音頻文件中的匹配內容

我有兩個mp3文件從電視節目中剝離。在電視節目開始時,他們有一個「先前」的概述,然後是節目的主題曲調,然後是實際節目。

回顧部分是可變長度,但主題曲調總是相同的。雖然由於整個文件的壓縮,但比較字節時可能不盡相同。

我的目標是比較節目的兩個mp3文件,找到常見的主題曲調並獲取它的時間範圍,這樣就有可能知道節目的實際內容在哪裏開始。

在文件中也可能存在多個常見匹配,例如,在兩個電視節目上的廣告,最好也找到這些。

我會在iOS上這樣做。

我應該研究哪些東西,傅里葉變換?

回答

2

尋找信號(音頻或其他信號)的傳統方法是使用a cross correlation,並且有效的方法是在頻域中,其中天真方法的昂貴的O(n^2)矩陣乘法變爲一個O(n)複共軛乘法。

在iOS上可以使用Accelerate框架來實現這一點,與電話

  • vDSP_fft_zrip每個音頻文件轉換到頻域
  • vDSP_zvcmul所得到的信號相乘在一起
  • vDSP_fft_zrip將產品轉換回時間域

The in這個最終結果中絕對值最大的指數給出了一個信號與另一個信號最佳匹配的時間滯後。

這個答案掩蓋了很多細節,包括打包(使乘法複雜化),信號填充,將mp3解碼爲信號處理函數期望的float/double格式,將立體聲平化爲單聲道以及打破十字關聯到較小的重疊塊,因爲您可能不想將整個電視節目音頻加載到內存中。

對不起。我很想寫一個小型的開源庫來做到這一點。這將是值得的100這樣的答案。

+0

感謝您提供的信息,我會研究您提到的內容並瞭解我可以做些什麼。 – Aardvark545