2013-07-30 173 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之外还有其他解决方案。自相关方法根本不使用频域。它会检查实际的音频文件样本以确定频率。这可能在计算上更昂贵,但也可能更准确。