0

我已经编写了一个获取音频频率的代码。
我使用过零算法将短数组转换为频率(int)。它工作正常。
每当我在我的 PC 中播放 2500Hz 音频时,它都给了我完美的价值。
例如 2500Hz=1400
如果我播放2500Hz音频10 秒,它会给我1400 10 秒
所以我可以说它工作正常,没有任何问题。代码没有任何问题。

但现在我的问题是,每当我改变设备时,输出也会改变。
例如,当我使用三星 GT-i5700(Android 2.2)
时,我得到了上面的输出。 但是当我使用Micro-max A-60(Android 2.1)时,它给了我这样的输出2500Hz=771

我找不到原因,为什么更改设备时会更改输出?
我该如何解决这个问题?
安卓版本和音频有关系吗?
注意:
我有将 PC 扬声器输出到设备 MIC 的电缆。所以我可以在 PC 中播放 Tone 并将其直接发送到 Device MIC。

4

2 回答 2

0

在 Android 上使用这个实现,我发现它也很少能得到正确的频率。然而,当它听到一个音调与随机语音时,它确实会产生一个“一致”的值,这仍然很有用。

于 2012-06-08T09:01:59.907 回答
0

如果在您更换手机时计算出的频率发生变化,那么我预计您的代码实际上并不好。您是否尝试过第三部手机并观察它给出的结果是否与前两部手机中的一部匹配?

如果您正在寻找可能更准确的解决方案(说 2500Hz 音调输出 1400 对我来说似乎很奇怪),请查看如何分析 PCM 或 WAV 样本的基频?选项。

于 2011-06-21T05:05:50.563 回答