我一直在研究吉他調諧器Java應用程序很長一段時間,並最終設法使用FFT和諧波來精確確定輸入的基頻(pitch)(基頻)檢測。產品範圍。當我使用我的MacBook Pro的默認麥克風時,儘管信號有點嘈雜,但是我最好喜歡使用直接插入電吉他的外部USB音頻聲音接口(Lexicon Lambda)。使用完全適用於麥克風輸入的完全相同的代碼嘗試了此操作,但檢測到的音高不同。這裏是我爲每個琴絃檢測到的基礎知識的結果(吉他已經調音)。Java音頻輸入不一致
採樣率= 8000個
樣品取= 16000
頻率分辨率= 0.5Hz的
ë - 麥克風:82.5Hz - 詞彙LAMBDA:124.5Hz
A - 麥克風:110.0Hz - 詞彙LAMBDA:165.5赫茲
d - 麥克風:147.0Hz - 詞彙LAMBDA:221.5Hz
ģ - 麥克風:196.0Hz - 詞彙LAMBDA:293.5Hz
乙 - 麥克風:247.0Hz - 詞彙LAMBDA:371.0Hz
ë - 麥克風:329.5赫茲 - 詞彙羔羊da:495.0Hz
我用這些數字搞混了一下,看起來使用Lexicon Lambda的結果通常約爲精確結果大小的1.5倍。但是,除了增加這個額外的計算來獲得正確的數字之外,我希望能夠使得獲得音頻數據的兩種方法都能夠返回準確的結果。
有沒有人知道這種不一致的原因可能是什麼?
編輯
所以我敢肯定,這個問題是使用24比特深度由於LAMBDA,而我的程序(和麥克風輸入)與16相反的位深工作不僅僅是改變它來處理24位數據,有沒有人知道一種方法來檢測當前音頻設備的可用位深度?
使用Lambda是首要任務,因爲信號噪音較小;但是,我剛纔試圖讓事情的指定位深度爲24,我得到IllegalArgumentException「無行匹配接口TargetDataLine支持格式PCM_SIGNED 8000.0 Hz,24位,單聲道,3字節/幀,小尾數支持「。我也嘗試使用44.1kHz以及我得到了同樣的錯誤,這表明Lambda實際上並沒有使用24位音頻,也許還有另一個問題。有沒有人有使用Java Sound中的24位音頻的經驗?似乎可能還有更多需要考慮的事情,而不是僅僅爲了完成這項工作而改變位深度。
由於
*「完全相同的代碼」*什麼代碼?爲了更快地獲得更好的幫助,請發佈[SSCCE](http://sscce.org/)。 – 2012-02-10 15:35:56
我還沒有試過這個,但是你確定你的Lamdba驅動支持8kHz採樣率嗎?實際上很少見 – guitarflow 2012-02-10 15:39:26
+1 @nihilo有趣的項目 – therobyouknow 2012-02-10 16:15:43