2013-04-20 130 views
5

我想編寫/編程/開發一種算法,可以從線路輸入/話筒音頻中識別出數據中的許多特徵。音頻流將是音樂,我想過濾出特徵來區分彼此的歌曲,區分我的意思是你可以將歌曲的流派分開。檢測音頻流中的特徵

我絕對想要檢測的一件至關重要的事情是什麼樣的酒吧/擊敗歌曲。例如,我想知道這首歌是否在3/4時間。

我發現的唯一有用的文章是關於BPM檢測,但這不足以區分另一首歌曲。

FFT是從音頻流獲得不同特徵的好開始,但我不知道從哪裏開始。是否有可能通過FFT獲得條/節拍?有沒有關於這個的很好的教程/代碼示例?

FFT是否足以獲得音頻流的良好特性,或者是否有其他任何有助於獲得音頻流特徵的算法?

最好我會在C#中這樣做,因爲這是我最熟悉的編程語言。這是可能的C#或另一種語言更好?

總結我的問題,我正在尋找任何有關在音頻流中查找特徵以獲取節拍/條和其他信息以區分歌曲的信息。

+1

我認爲你在這裏混淆拍(「BPM」)和米(「3/4時間」)。節拍可檢測,電錶可能是,但更加微妙。 – RBarryYoung 2013-04-20 08:30:18

+0

我不是英語母語的人,我盡力解釋我的問題,但我認爲我沒有混淆「BPM」和「米」。也許你只是誤解了我的英語。我已經知道一些獲取BPM的方法,但我無法用它區分歌曲。我也想發現「米」,我知道這是一個棘手的問題,但如果有人知道這件事,我會很高興。 – Shamshiel 2013-04-20 10:17:01

回答

0

傅里葉變換將告訴你聲音中的頻率。這可能足以告訴你他們是錄製它的關鍵。我懷疑它會告訴你更多的東西。

軟件(如Shazam)可以將兩段錄製的音樂識別爲相同。你想做一些不同的事情 - 你想以分類的形式提取意義。將此與語音識別進行比較;這是一個類似的問題。音樂實際上要難得多,因爲通常涉及幾種樂器。我們的大腦可以使用非常複雜的模式識別來提取單個樂器(鼓,吉他),然後使用單個樂器來確定儀表和節拍。就像我們可以跟着電視上的對話一樣。計算機不能將聲音分解成單獨的聲音(還),只是聽到連續的聲音。這使我認爲提取有意義的信息(節拍,電錶)將不得不等待,直到我們可以將聲音解析爲計算機上單獨的「聲音」。

你想做的事情有一天是可能的,而且會很棒。但我認爲我們還有一段距離;也許當電腦可以流利地演繹演講時,他們也可以流利地演繹音樂。也許在10年。

0

開放源代碼aubio庫從音頻中提取特徵。它用C編寫,但可以作爲託管實現的參考。或者你可以P /調用它。

aubio是一款專爲從音頻信號中提取註釋而設計的工具。其功能包括在每次攻擊之前對聲音文件進行分段,執行音高檢測,敲擊節拍以及從實況音頻中生成midi流。