我正在尝试做一个应用程序,用户会说一些话,然后单击一个按钮,该按钮会为他们所说的话提供频率值。我搜索了很多,得出的结论是,我需要首先使用音频记录类来记录语音,然后使用FFT将其转换为频率。我的主要问题是FFT给出了一个频率图,我不需要,我需要频率和音高值。我该怎么做?
请帮助我:)
除非你收集的是纯音高的声音(比如正弦波),否则你的结果实际上是你目前通过FFT得到的一系列频率(请查看此描述)。
可以使用音高估计算法从FFT图中收集声音的音高(请参阅此处的答案)。如果合适的话,这里有一些开源球场跟踪实现的链接。
这绝对可行!
祝你好运。
有很多东西可以用来帮助这个过程。JTransforms是一个库,可以让您轻松地进行FFT。你需要在多个点进行FFT,以获得每个点的相应频率。当我说"点"时,我的意思是你应该把音频分解成块,然后单独进行FFT处理。这些块可以重叠以提高精度。为了获得更高的精度,还可以在执行FFT之前对它们进行开窗。
然后,需要对FFT的结果进行更多的处理,以使结果更加准确。这可以使用倒频谱分析或谐波乘积频谱分析以及其他方式来完成。
最后,请记住,除了FFT,还有其他解决方案。自相关方法根本不使用频域。它检查实际的音频文件样本以确定频率。这可能在计算上更昂贵,但也可能更准确。