2013-12-22 150 views
7

我試圖從音頻文件中提取音高特徵,我將其用於分類問題。我正在使用python(scipy/numpy)進行分類。從音頻文件中提取音高特徵

我想我可以使用scipy.fft獲得頻率特徵,但我不知道如何使用頻率來近似音符。我研究了一下,發現我需要獲得色度特徵,將頻率映射到半音音符的音符12

我認爲有一個用於matlab的色度工具箱,但我不認爲有任何與python相似的東西。

我應該如何繼續? 任何人都可以建議閱讀材料,我應該看看?

回答

3

可以頻率映射到音符:

n=12*log_2(f/Cp)+69

n而要計算的MIDI音符編號,f頻率和Cp室間距(在現代音樂440.0赫茲是常見的)。

正如你可能知道一個單一的頻率不會形成音樂節奏。 「音調」是由諧波聲音的基本感覺產生的,即主要由一個單一頻率(=基頻)的整數倍組成的聲音。

如果您想在Python中使用色度功能,您可以使用Bregman Audio-Visual Information Toolbox。請注意,色度功能不會提供有關音高八度的信息,因此您只需獲取有關pitch class的信息。

from bregman.suite import Chromagram 
audio_file = "mono_file.wav" 
F = Chromagram(audio_file, nfft=16384, wfft=8192, nhop=2205) 
F.X # all chroma features 
F.X[:,0] # one feature 

從音頻中提取基音信息的一般問題稱爲pitch detection

+1

非常感謝...你能不能推薦閱讀有關基音檢測或dsp應用於音樂的一般材料或書籍? –

+2

作爲一個廣泛的計算機音樂問題的一般介紹C.道路_計算機音樂教程_(1994年,劍橋:麻省理工學院出版社)是一個非常容易訪問和全面(> 1000頁)的參考書。對我來說,M.Müllers的第一部分_音樂與運動信息檢索_(2007年,柏林,海德堡:施普林格)很棒(不全面,更新,更技術)。如果您對某個特定主題感興趣,那麼ISMIR的[procceedings](http://www.ismir.net/proceedings/)就是一個豐富的信息鏈。其他人可能會給你其他(和更好的?)參考。我也會感興趣。 –

+0

謝謝..我會研究它們 –

2

您可以嘗試閱讀關於基音檢測的文獻,這是相當廣泛的。通常基於自相關的方法似乎工作得很好;頻域或零交叉方法的魯棒性較差(因此FFT實際上並沒有多大幫助)。一個好的起點可以是實現這兩種算法之一:

至於現成的,現有的解決方案,檢查出Aubio,C代碼與Python包裝,包括YIN和多梳幾個可用的瀝青提取算法。

+1

非常感謝:)關於aubio,我在本頁找到了實現示例http://aubio.org/doc/latest/examples。html有點困難。我找不到他們在圖書館的例子中使用的方法,沒有足夠的文檔。 –

2

如果你願意使用第三方庫(至少與別人如何參考做到了這一點):

提取從聲音的音樂信息,從2012年PYCON演示,展示瞭如何使用AudioNest Python的API:

下面是相關EchoNest DOC umentation:

相關摘錄:

音高內容由「色度」載體給出,對應於 12間距類的C ,C#,D到B,值範圍從0到1, 描述th在半音音階中每個音高的相對優勢。例如C大調和將可能由C,E和G(即,類別0,4和7)的大值表示。載體是 歸一化爲1可以通過最強尺寸,因此有噪聲的聲音 有可能通過該均接近1的值表示,而純 音由一個值在1(節距)以及其他接近0

描述

EchoNest在其服務器上進行分析。他們提供非商業用途的免費API密鑰。

如果EchoNest不是一個選項,我會看看開放源代碼aubio project。它有python綁定,你可以查看源代碼,看看如何they accomplished pitch detection

+0

謝謝。有趣的vid :) –