好的,所以我不确定如何描述这个问题,因为我是音频分析的新手,所以我将逐步解释它。
- 所以我在这里用 csharp 写了这个算法
// Put into groups
for (int i = 0; i < onsets.Count-1; i++){
for (float i2 = 1f; i2 < range+1; i2++){
if (onsets[i] >= rangemult*(i2-1f) && onsets[i] <= rangemult*i2){
sorted.Add(((rangemult*i2)*2f)*10f);
}
}
}
- 这是它的作用:
onsets --> 包含找到的起始点的列表(不包括任何 0)
范围 --> 歌曲样本深度(1024)
rangemult --> 是起始列表中的最大值(so onsets.Max())
除以range
so(max DIV range)
sorted --> 列出排序的起始点被添加到
(rangemult*i2)*2f)*10f
--> 我这样做是为了让值成为一个整数(这在大多数情况下不会发生,但这实际上只是为了整洁——所以在大多数情况下它可以被忽略)
原则上,该算法会将数组 ( 0.1, 0.2, 0.4, 0.45, 0.5
)转换为
range = 10
到2, 4, 8, 9, 10
range = 20
到4, 8, 16, 18, 20
ETC...
- 所以鉴于此,为什么将 when
1024
设置为range
最大值 insorted
总是20
?
附加信息:
- 我正在使用 lomont FFT
- 1024 在整个发病检测算法中保持不变
onsets.max()
像往常一样对待1
(我还没有找到onsets.Max()
不是 1 的实例)
如果您能就问题提供哪怕是最小的提示,我将不胜感激 - 如果这里没有足够的信息或不需要这些信息,请通知我,因为我还是新手,所以我很难用准确的方式 - 谢谢你的理解:)