大家好,我有一种记录方法,可以将用户演奏的音符实时写入数组。唯一的问题是有轻微的延迟,播放时每个序列的速度明显减慢。我将播放速度提高了大约 6 毫秒,听起来不错,但我想知道其他设备上的延迟是否会有所不同?
我已经在第 2 代 iPod touch 上进行了测试,在第 3 代、第 4 代以及 iPhone 上表现如何?我需要对所有这些进行测试并找到最佳延迟变化吗?
有什么想法吗?
更多信息: 我使用两个 NSThreads 而不是计时器,并用不应播放音符的空白点填充数组(我使用整数,-1 是空白)。录音时每 0.03 秒添加一个空白。每次用户敲击一个音符时,最近的空白都会被数字 0-7 替换。回放时使用第二个线程(2个线程,因为第二个线程的时间间隔较短),时间为0.024。 6 毫秒的差异补偿了录制和播放之间的延迟。
我认为录制或演奏音符需要比另一个花费更长的时间,从而产生延迟。
我想知道的是其他设备上的延迟是否会有所不同,以及我应该如何补偿它。
精确解
我可能没有完全解释它,这就是为什么没有提供这个解决方案,但对于任何有类似问题的人......
我播放的每个节拍类似于 MIDI 文件,如下所示:
while playing:
do stuff to play beat
new date xyz seconds from now
new date now
while now is not > date xyz seconds from now wait.
我错过的明显事情是在播放节拍之前创建两个日期......
天啊!
最佳答案
在我看来,额外的延迟更有可能是由音符的播放或第二个线程中的其他计算开销引起的。在播放每个音符之前,获取第二个线程中的挂钟时间,并检查与上一个音符的时间差。您需要将跟随延迟减少任何多余的时间(可能是 0.006 秒!)。
不同代的 iPhone 上的延迟会有所不同,但是通过像这样动态适应,只要处理开销小于 0.03 秒,您就是安全的。
您也应该在第一个线程中执行相同的操作。
获取高分辨率时间戳 - 苹果论坛上有一个讨论 here ,或者这个stackoverflow question.
关于iphone - iOS - 速度问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4269286/