我正在使用Mozilla音频数据API,按照说明here。音频数据API节拍检测
上面的代码在FFT算法中使用了Float32Array
。它似乎保留了后来储存在magnitude
中的频率变化。我想制定一个条件来确定这个数字是否大于1,如下所示:
if (magnitude > 1) {
beat = true;
} else {
beat = false;
}
该条件失败,您有什么想法为什么? 谢谢。
我正在使用Mozilla音频数据API,按照说明here。音频数据API节拍检测
上面的代码在FFT算法中使用了Float32Array
。它似乎保留了后来储存在magnitude
中的频率变化。我想制定一个条件来确定这个数字是否大于1,如下所示:
if (magnitude > 1) {
beat = true;
} else {
beat = false;
}
该条件失败,您有什么想法为什么? 谢谢。
由于各种原因,您的条件测试可能会失败。当阈值为1时,幅度的大小可能是错误的。您可能看错了幅度。或者您正在测试的音乐类型可能会有跳动,但幅度不会超过您的阈值。
有关节拍检测主题的大学研究论文,您可能会发现有用的阅读。
我会再次读这方面的学术文献。您也可以结帐出声波显像管 - 它包含了各种起始检测模块。频谱方法检测发音的一个基本问题是,流行音乐中的许多发音都来自撞击声音,这些声音倾向于类似噪音 - 能量在各种频率上发生碰撞。 – marko
您使用的FFT大小是多少?一般来说,FFT对于节拍检测来说是一个糟糕的选择,因为它缺乏时间分辨率。 – marko
嗯你是什么意思的FFT的大小?我只是认为使用这个API对我来说更容易,因为我没有很好的算法技能...... – keepthepeach
这是一件大事。 FFT在采样窗口上运行。根据定义,任何试图用FFT进行起始检测的算法的时间分辨率都是这个窗口的周期 - 在实践中,更少。如果您使用1024pt FFT进行操作,那么分辨率为23ms的44.1kHz - 换言之,即43秒。实际的发病检测算法往往不是基于频域的。 – marko