3

我正在尝试做一个应用程序,用户会说些什么,然后单击一个按钮,该按钮将为他们提供他们所说的频率值。我一直在搜索,我得出的结论是,我需要先使用音频记录类,记录语音,然后使用 FFT 将其转换为频率。我的主要问题是 FFT 给出了频率图,我不需要它,我需要频率和音高值。我怎样才能做到这一点?

请帮我 :)

4

2 回答 2

3

除非您正在收集纯音高的声音(如正弦波),否则您的结果实际上将是您目前使用 FFT 获得的频率范围(查看描述)。

可以使用音高估计算法从 FFT 图中收集声音的音高(请参阅此处的答案)。如果合适的话,这里有一些开源音高跟踪实现的链接。

这绝对是可行的!

祝你好运。

于 2013-07-30T06:51:28.193 回答
0

您可以使用很多东西来帮助完成此过程。JTransforms 是一个让您轻松进行 FFT 的库。您需要在多个点进行 FFT 以获得每个点的相应频率。当我说“点”时,我的意思是您应该将音频分成将单独进行 FFT 的块。这些块可以重叠以提高准确性。也可以在执行 FFT 之前对它们进行加窗以获得更高的准确性。

然后,需要对 FFT 的结果进行更多的操作以使结果更准确。这可以使用倒谱分析或谐波乘积频谱分析以及其他方式来完成。

最后,请记住除了 FFT 之外还有其他解决方案。自相关方法根本不使用频域。它检查实际的音频文件样本以确定频率。这在计算上可能更昂贵,但也可能更准确。

于 2013-09-06T20:03:46.650 回答