2011-06-21 141 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,我发现它很少获得正确的频率。然而,当它听到一个音与一个仍然有用的随机语音时,它确实会产生一个“一致的”值。