2013-07-30 168 views
2

我正在嘗試做一個應用程序,在那裏用戶會說些什麼,然後點擊一個按鈕,它會給他們所說的頻率值。我一直在尋找很多東西,並得出結論,我需要首先使用音頻記錄類來記錄語音,然後使用FFT將其轉換爲頻率。 我的主要問題是FFT給出了一個頻率圖,我不需要這個,我需要頻率和音調值。我怎樣才能做到這一點?從android錄音文件中獲取頻率和音高

請幫我:)

+0

請參閱:http://en.m.wikipedia.org/wiki/Pitch_detection_algorithm – hotpaw2

回答

3

除非你正在收集一個純粹的聲調的聲音(如正弦波),你的結果實際上將你與FFT越來越此刻頻率的範圍(支票出this說明)。

通過使用音高估計算法可以從FFT圖中收集聲音的音高(參見回答here)。 Here's some links開源音高跟蹤如果適合的話。

這絕對是可行的!

祝你好運。

+0

您能否提供我使用音高估計算法獲取音高值的示例。 – Nutan

+0

嘿Nutan,不是真的對不起。有一個很好的例子[這裏](http://stackoverflow.com/questions/9979196/find-voice-pitch-on-android)用於處理FFT值,以及頻率到音高的映射[here]( http://www.codeproject.com/Articles/32172/FFT-Guitar-Tuner)。真的希望我能有更多的幫助。 – CodeMonkey

0

有很多事情可以用來幫助完成此過程。 JTransforms是一個庫,可讓您輕鬆進行FFT。您需要在多個點上進行FFT,以獲得每個點的相應頻率。當我說「點」時,我的意思是你應該把音頻分成塊,這些塊將單獨進行FFT。這些塊可以重疊以提高準確性。它們也可以在執行FFT之前加窗,以獲得更高的精度。

然後,FFT的結果需要進一步處理,以使結果更準確。這可以通過使用倒譜分析或諧波產品頻譜分析和其他方法來完成。

最後,請記住除FFT之外還有其他解決方案。自相關方法根本不使用頻域。它會檢查實際的音頻文件樣本以確定頻率。這可能在計算上更昂貴,但也可能更準確。