4

简而言之: 我有一个方法以每秒 44,100 次的速度被调用。我想知道在需要在第 13781.25 次方法调用时打勾的情况下该怎么做——即每分钟 192 次节拍)。我可以选择四舍五入该数字并在第 13781 次方法调用时发出声音,这意味着我在 0.25 时发出声音太早了。这相当于早了 0.00000566893424 秒。

在 100 个滴答声之后,我确信延迟肯定会加起来。是否有任何聪明的解决方法可以跟踪延迟,并且当延迟超过某个点时,可能会有一些数字来保持节拍再次正常运行?

到目前为止,这是我下面的代码..

int counter; // used to track down the amount of times the method has been called

signalMethod(){
    if(counter % ceil(2,646,000/10) == 0){ //the ceil function turns the decimal point into a whole number so it can be used for analysis. but this will cut off delay.. and over time im sure it will add up.. which will cause the beats to fluctuate...
        playSound();
    }
    counter++;
}
4

1 回答 1

6

您的问题只是解决“布雷森汉姆算法”问题的另一种变体,但不是增加以特定斜率绘制的线的 Y 坐标(斜率将是拍频),而是发出滴答声。

布雷森汉姆算法的维基百科

于 2012-05-05T09:24:46.180 回答