从歌曲-Java获取当前的音频频率(也许使用FFT?)



我正在尝试进行一个学校项目,我正在尝试在Java中构建一个我必须分析歌曲的应用他们被击中即:每当它击中1Hz时,它将打印到控制台" 1Hz"。

我有音频分析的所有文件,即:com.badlogic.audio package。

这是一个非常重要的项目,我对Java是相对较新的项目(我在高中,这是我当年的主要项目)。

请有人通过如何将FFT算法实施到歌曲中吗?IE:如何在屏幕上显示:"选择歌曲",然后当他们选择歌曲时,在媒体播放器或某些东西上大声播放,并且在播放时,每当它命中某些点时,输出某些东西(例如1Hz示例)上面)。

还有另一个可以将歌曲中的当前频率返回给我的库吗?

事先感谢您的任何帮助或建议!

问题是,歌曲中几乎没有一个"当前频率"。除非是纯正的正弦音,否则有多种泛音。当您有多种乐器变得更加复杂时。

是的,傅立叶变换可以告诉您存在哪些频率。您必须查看所使用的FFT软件包(BadLogic Code)的文档,以获取有关如何调用它的信息。他们的示例程序(例如fftTest)可能会特别有用。

不是一个微不足道的项目,而应该是一个有趣的项目。祝你好运!

为什么不从研究Java声音API开始?在分析之前,您需要将音频文件导入到Java中。获取不同的代码段。然后绘制您的代码需要做的所有事情,然后Google找到缺少元素的代码。最后,将所有工作元素放在一起。

您可以使用Commons数学库进行DFT(FFT),因为它包含许多其他有用的方法。可以简单地从FastFourierTransformer对象以及transform(double[] input)transform(Complex[] input)方法调用FFT。因此,您需要将音频文件的数据变成类似的数组格式。几乎所有的DFT/FFT方法都将期望一个数组输入,并将返回包含转换后输入的(复杂的)数组输出。

但是,请记住,FFT包含没有时间信息,因此,如果您想查看何时出现频率(1Hz)以做某事,那么您需要要么经常进行多个FFT(并确定是否在该时间窗口中击中音符),要么使用小波转换。FFT没有给您时间分辨率的原因正是因为您将时间域信号转换为频域信号。这是了解您是否要执行此项目的重要一点。

如果要执行此操作,第一件事就是找到一个FFT软件包并熟悉它。(您不想写自己的。)找出某种方法来绘制输出(如果仅通过"打印图"),以便您可以感觉到频谱的外观。p>一旦掌握了它,检测特定的峰就不会那么困难(如果您对数学和编程有想法)。

此外,您可能需要获得一个可以执行FFT和绘图的独立音频包,因为这些图将更加干净,并更好地分辨率。(我认为大胆可以做到这一点。)

还要注意,有一个信号处理,因此可以为您提供更多专业帮助的站点。(请务必解释您是HS学生,而不是专业学生。)

相关内容

最新更新