我有一个应用程序,使用44100的采样率输出代表1/96节拍的缓冲区块(让它们称为脉冲)。
在120 BPM恒定时,我每秒有2拍,因此每拍22050个样本,因此每个脉冲229,6875个样本。这些是我从应用程序中获得的第一个值:
0
230
459
689
919
1148
1378
1608
1838
2067
2297
2527
2756
2986
3216
3445
3675
3905
4134
4364
4594
4823
5053
5283
5512
5742
5972
6202
6431
注意两件事:
在常数190 BPM时,我每脉冲有145,0657895个样本。我得到的第一个价值观:
0
145
290
435
580
725
870
1015
1161
1306
1451
1596
1741
1886
2031
2176
2321
2466
2611
2756
2901
3046
3191
3337
3482
3627
3772
3917
4062
和以前一样,将一半转为偶数,现在距离可以是145或146.
嗯,直到这里没什么难的。现在!如果我在120 BPM启动应用程序并且在25脉冲之后切换到190 BPM,那么切换后我得到了一个奇怪的距离:
0
230 // distance 230
459 // distance 229
689 // distance 230
919 // distance 230
1148 // distance 229
1378 // distance 230
1608 // distance 230
1838 // distance 230
2067 // distance 229
2297 // distance 230
2527 // distance 230
2756 // distance 229
2986 // distance 230
3216 // distance 230
3445 // distance 229
3675 // distance 230
3905 // distance 230
4134 // distance 229
4364 // distance 230
4594 // distance 230
4823 // distance 229
5053 // distance 230
5283 // distance 230
5512 // distance 229
5742 // distance 230 - here I switch
5887 // distance 145
6032 // distance 145
6177 // distance 145
6322 // distance 145
6468 // distance 146
为什么最后146个值(6468)?
在您看来,由于“什么”prev缓冲区之间的距离是146而不是145?尝试在每次迭代时舍入下一个/上一个,但似乎正确得到145作为值。取而代之的是146。
这令我所有的柜台感到困惑。有线索吗?
答案 0 :(得分:2)
229.6875 * 25 = 5742.1875
145.0657895 * 5 = 725.3289475
5742.1875 + 725.3289475 = 6467.5164475 rounding to 6468
请注意,基础计算是以精确(仅浮点)数字
进行的