2014-01-16 82 views
0

我正在使用Mozilla音頻數據API,按照說明here音頻數據API節拍檢測

上面的代碼在FFT算法中使用了Float32Array。它似乎保留了後來儲存在magnitude中的頻率變化。我想制定一個條件來確定這個數字是否大於1,如下所示:

if (magnitude > 1) { 
    beat = true; 
} else { 
    beat = false; 
} 

該條件失敗,您有什麼想法爲什麼? 謝謝。

+0

您使用的FFT大小是多少?一般來說,FFT對於節拍檢測來說是一個糟糕的選擇,因爲它缺乏時間分辨率。 – marko

+0

嗯你是什麼意思的FFT的大小?我只是認爲使用這個API對我來說更容易,因爲我沒有很好的算法技能...... – keepthepeach

+0

這是一件大事。 FFT在採樣窗口上運行。根據定義,任何試圖用FFT進行起始檢測的算法的時間分辨率都是這個窗口的週期 - 在實踐中,更少。如果您使用1024pt FFT進行操作,那麼分辨率爲23ms的44.1kHz - 換言之,即43秒。實際的發病檢測算法往往不是基於頻域的。 – marko

回答

0

由於各種原因,您的條件測試可能會失敗。當閾值爲1時,幅度的大小可能是錯誤的。您可能看錯了幅度。或者您正在測試的音樂類型可能會有跳動,但幅度不會超過您的閾值。

有關節拍檢測主題的大學研究論文,您可能會發現有用的閱讀。

+0

我會再次讀這方面的學術文獻。您也可以結帳出聲波顯像管 - 它包含了各種起始檢測模塊。頻譜方法檢測發音的一個基本問題是,流行音樂中的許多發音都來自撞擊聲音,這些聲音傾向於類似噪音 - 能量在各種頻率上發生碰撞。 – marko