更新:迄今为止 表现最佳的算法就是这个算法.
该问题探讨了用于检测实时时间序列数据中的突然峰值的稳健算法.
请考虑以下数据集:
p = [1 1 1.1 1 0.9 1 1 1.1 1 0.9 1 1.1 1 1 0.9 1 1 1.1 1 1 1 1 1.1 0.9 1 1.1 1 1 0.9 1, ...
1.1 1 1 1.1 1 0.8 0.9 1 1.2 0.9 1 1 1.1 1.2 1 1.5 1 3 2 5 3 2 1 1 1 0.9 1 1 3, ...
2.6 4 3 3.2 2 1 1 0.8 4 4 …Run Code Online (Sandbox Code Playgroud) language-agnostic algorithm signal-processing time-series data-analysis
如何以编程方式确定歌曲的速度/ BPM?常用的算法是什么,必须考虑哪些因素?
无论如何都要以编程方式分析音频音高.例如,我知道大多数玩家都会显示一个图形或条形图,如果歌曲音高在@时间t很高,那么条形图会在时间t上升......就像这样.是否有任何实用程序/工具/ API来确定歌曲音高,以便我们将其插入到向上和向下的条形图中.
谢谢你的帮助
我有这个代码,但它会随机返回0到1050左右的随机频率.请你帮我理解为什么会这样.
我的数据长度为1024,采样率为8192,数据是一个填充了麦克风输入数据的短阵列.
float *iSignal = new float[2048];
float *oSignal = new float[2048];
int pitch = 0;
for(x=0;x<=1024;x++) {
iSignal[x] = data[x];
}
fft(iSignal,oSignal,1024); //Input data, output data, length of input and output data
for(int y=0;y< 2048;y+=2) {
if((pow(oSignal[y],2)+pow(oSignal[y+1],2))>(pow(oSignal[pitch],2)+pow(oSignal[(pitch)+1],2))) {
pitch = y;
}
}
double pitchF = pitch / (8192.0/1024);
printf("Pitch: %f\n",pitchF);
Run Code Online (Sandbox Code Playgroud)
谢谢,
尼尔.
编辑:更改了代码,但它仍然返回随机频率.