1

所以基本上我希望它得到 60 - 150 Hz 的范围,这是歌曲中低音的一般区域。每当它在这个范围内时,我希望它执行一个功能,并且只有它的范围,我的问题是我试图查找这样做所需的功能但没有运气,如果有人可以在这里向我展示或一篇好文章或对此的解释会很棒!我感谢所有帮助,我将继续自己寻找。如果需要更多解释,我可以提供所需的任何信息!

奥斯汀。

更新:我在这里简化了一个算法:

  1. 用户选择他们想要的歌曲
  2. 歌曲加载到播放器
  3. 函数扫描歌曲并找到整个歌曲中的较低频率,输出是一个模式。
4

1 回答 1

1

第 1 步)进行快速傅立叶变换:http ://en.wikipedia.org/wiki/Fast_Fourier_transform

FFT 获取一段声音并将其转换为频域/时域——例如,播放哪些频率、播放的强度以及声音的哪些部分。这是一种有用的数学运算,它依赖于所有声音(无论多么复杂)都可以从根本上由一个或多个不同频率和幅度的正弦波构成的特性。

如果您曾经查看过频谱图,例如在 foobar2000 中,它是使用 FFT 实现的:

使用快速傅立叶变换的 foobar2000 频谱图

我建议不要尝试自己实现 FFT,而是找到一个经过良好测试且速度很快的库,例如用 C 编写的http://en.wikipedia.org/wiki/FFTW

第 2 步)现在您已经对用户正在收听的声音部分进行了 FFT,您可以简单地检查频率箱并做任何您想做的事情!虽然检测低音踢并不像“这个频率箱是一个高值吗?”那么简单。因为那样你可能会将低音线误认为是低音踢。您可能需要进行进一步的测试和研究才能使其正常工作。

编辑: Delyan 建议http://www.clear.rice.edu/elec301/Projects01/beat_sync/beatalgo.html看起来不错。

于 2013-03-15T00:32:08.017 回答