0

我是 AudioKit 和一般数字音频的新手,所以我确信一定有我遗漏的东西。

我试图通过获取每个回调的时间戳来从 AKMetronome 获得精确的时间。不过,时间似乎以某种方式被量化了,我不知道它是什么。

示例:如果我的节拍器设置为 120,则每个回调应该恰好相隔 0.5 秒。但是,如果我计算从一个滴答声到下一个滴答声的差异,我会得到:

0.49145491666786256

0.49166241666534916

0.5104563333334227

0.4917322500004957

0.5104953749978449

0.49178879166720435

0.5103940000008151

0.4916401666669117

它始终是 2 个值之一,误差范围非常小。我希望能够计算下一个滴答声何时到来,这样我就可以提前几帧触发动画,但这很困难。我忽略了什么吗?

编辑:自从我最初发布这个问题以来,我想出了一个解决方案,但我不确定它是唯一还是最好的解决方案。

我使用将缓冲区设置为最小大小AKSettings.BufferLength.veryShort

使用最小的缓冲区,时间戳总是在一两毫秒内打开。我仍然不确定我是否做对了,或者这是否是AKCallback. 即使缓冲区更长,回调似乎也应该准时。

4

1 回答 1

0

你是Timer用来计算时差的吗?从我的角度来看,根据我的发现,这个问题与Timer在 ios 中并不精确的问题有关,请参阅线程(NSTimer 的准确性)。

或者,您可以查看 AVAudioTime ( https://audiokit.io/docs/Extensions/AVAudioTime.html )

于 2020-05-04T16:10:45.087 回答