2011-06-21 185 views
0

我已經編寫了一個獲取音頻頻率的代碼。
我已經使用零交叉算法將短陣列轉換爲頻率(int)。 它工作正常。
每當我在我的PC上播放2500Hz音頻時,它給了我完美的價值。
例如2500Hz的= 1400
如果我打 2500Hz的音頻頻率10秒它給了我爲 10秒
所以我可以說,它工作正常,沒有任何問題。代碼沒有任何問題。Android中的音頻頻率

但現在我的問題是,每當我改變設備的輸出也改變了。
例如上面的輸出我得到的,當我使用三星GT-I5700。(安卓2.2)
但是當我使用微-MAX A-60(安卓2.1)它給了我這樣2500Hz的= 771輸出。

我找不到原因,爲什麼輸出在設備更改時更改?
我該如何解決這個問題?
安卓版和音頻有沒有關係?
注:
我有一根電纜,可以將PC揚聲器的輸出提供給Devices MIC。所以我可以在PC上播放Tone並直接發送到Device MIC。

+0

也許這兩種設備的採樣率不同?但是請注意,使用過零點是測量頻率的一種非常不可靠的方法 - 它僅適用於零噪聲的純音(正弦曲線)。增加滯後效應可能會有所幫助,但它永遠不會是一個好的解決方案。 –

+0

請將您的代碼粘貼到這裏,我們希望看到它的順序ti幫助ypu,如果您已經擁有它,請與我們分享,請致電 感謝VanPersie – 2011-09-28 21:30:37

回答

0

如果計算出的頻率在您更換手機時發生變化,那麼我認爲您的代碼實際上並不正確。你是否嘗試過第三款手機,並觀察其結果是否與之前的兩款手機相匹配?

如果您正在尋找更準確的解決方案(說2500Hz音調輸出1400對我來說似乎很奇怪),請查看How do you analyse the fundamental frequency of a PCM or WAV sample?以瞭解選項。

0

在Android上使用這個implementation,我發現它很少獲得正確的頻率。然而,當它聽到一個音與一個仍然有用的隨機語音時,它確實會產生一個「一致的」值。