所以基本上我希望它获得 60 - 150 Hz 的范围,这是歌曲中低音的一般区域。每当它在这个范围内时,我希望它执行一个功能,并且只在范围内执行,我的问题是我试图查找这样做所需的功能但没有运气,如果有人可以在这里给我看或者一篇好文章或对此的解释会很棒!我感谢所有帮助,我将继续自己寻找。如果需要更多解释,我可以提供所需的任何信息!
奥斯汀。
更新:我在这里简化了一个算法:
- 用户选择他们想要的歌曲
- 歌曲加载到播放器上
- 函数扫描歌曲并在整首歌曲中找到较低的频率,输出是一个模式。
最佳答案
步骤 1) 进行快速傅立叶变换:http://en.wikipedia.org/wiki/Fast_Fourier_transform
FFT 获取一段声音并将其转换为频域/时域 - 例如,正在播放的频率以及声音的强度和持续时间。这是一种有用的数学运算,它依赖于所有声音,无论多么复杂,都可以从根本上由一个或多个不同频率和振幅的正弦波构成的特性。
如果您曾经看过频谱图,例如在 foobar2000 中,它是使用 FFT 实现的:
我建议不要尝试自己实现 FFT,而是找一个经过良好测试且速度很快的库,例如 http://en.wikipedia.org/wiki/FFTW这是用C写的
第 2 步) 现在您已经对用户正在收听的声音部分进行了 FFT,您可以简单地检查频点并做任何您想做的事!尽管检测低音冲击并不像“这个频率仓值高吗?”那么简单。因为那样的话您可能会将低音线误认为是低音底鼓。您可能需要进行进一步的测试和研究才能使其正常工作。
编辑:Delyan 建议 http://www.clear.rice.edu/elec301/Projects01/beat_sync/beatalgo.html而且看起来还不错。
关于java - 我想知道如何使用用户选择的音乐文件,然后检测特定的声音频率。安卓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15422341/