但我发现我什么也不懂,甚至不知道如何将其实现到我的应用程序中。
有人能帮我学习其中任何一种吗?我的电子邮件是sismetic_chaos@hotmail.com。我真的需要帮助,我已经困在那里三天了,没有编码或做任何事情,试图理解,但我不行。
PS:我的应用程序是用C++和Qt编写的。
PS:感谢您花时间阅读此内容并愿意提供帮助。
编辑:感谢所有回答,问题还没有得到解决,但我感谢所有回答和信息。谢谢大家。
FFT的输出可以给出音频样本的频谱,但从FFT输出中提取节奏可能不是您想要的方法。
您可以使用峰值检测来识别通常在音乐的“下拍”上发生的音量“峰值”。如果您可以识别出下拍,则可以使用类似bpmdatabase.com这样的资源找到歌曲的节奏。 节奏将告诉您闪烁的速度,而您检测到的峰值将告诉您何时开始闪烁。让您的应用程序监视闪烁,以确保它们通常与峰值同时发生(如果两者开始分歧,则节奏可能在歌曲中改变)。
听起来很简单,但实际上这是一件非常复杂的事情。您可能需要阅读this SO question以获取更多信息。那里的答案中有一些优质链接。
如果我完全误解了你的意图,你需要做FFT以完成其他任务,那么你可能想要考虑使用现有的FFT库来为你完成繁重的工作。一些例子包括 FFTW 和 KissFFT。听起来你可能想让你的可视化器与音乐一起闪烁屏幕。我不认为计算FFT会对你有所帮助。在任何时刻,都会有许多同时存在的频率成分,遍布整个音频频谱(大约20 Hz到20 kHz)。但你可能更感兴趣的是音乐节奏(每分钟节拍数——更像是5 Hz或以下),这在原始音频信号的FFT中不会出现。
你可能需要更简单的东西——某种实时峰值检测。每当你看到一个峰值高于平均音量的某个阈值时,让你的屏幕闪烁。
当然,更复杂的可视化可能会充分利用FFT,但你所描述的不是其中之一。
我的建议是找一个可以为您完成此操作的库。除非您有大量数学支持,否则我认为您将浪费大量时间尝试学习FFT,而您真正想要的只是一些“每分钟基本命中率”数字,以便您可以相应地调整图形。
请查看这篇类似的帖子: 这里
我花了大约三个星期的时间理解FFT背后的数学知识,然后又花了一个星期的时间使用这些概念在Matlab中编写了一些东西。如果您在三天后感到沮丧,请不要尝试自己编写。
我希望这是有用的建议,而不是令人泄气的。
-Brian J. Stinar-
正如之前的回答所指出的那样,FFT 可能不是您需要解决问题的工具,因为它需要节奏检测而不是频谱分析。
关于使用 FFT 可以做什么 - 以及如何将特定的 FFT 实现集成到 Qt 应用程序中,请参阅这篇博客文章,其中描述了我开发的频谱分析器演示。演示的代码随 Qt 本身一起提供,在demos/spectrum目录中。