2010-11-24 49 views
2

大家好,我有一种录制方法,可以将用户实时播放的音符写入数组中。唯一的问题是播放时有轻微的延迟,每个序列明显放慢。我将播放速度提高了大约6毫秒,听起来不错,但我想知道其他设备的延迟是否会有所不同?iOS - 速度问题

我已经测试了一个iPod touch第二代,那么这个预制棒会在第三和第四以及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. 

,我缺的是对之前打节拍创建两个日期的明显的事情...

D'OH!

+0

AA讨论“嘿,我有记录的方法,在写到用户播放的音符到一个数组即时的。”你将不得不更加清楚地解释一下。 – 2010-11-24 16:50:07

+0

对不起,主要观点是我想知道延迟在多个设备上是否会有所不同。我现在将继续提供更多信息。 – 2010-11-24 16:51:50

回答

4

看来我更有可能认为附加延迟是由音符的播放或第二个线程中的其他计算开销引起的。在播放每个音符前,抓住第二个线程的挂钟时间,并检查最后一个音符的时间差。您将需要减少任何多余的(可能为0.006秒!)以下延迟。

iphone的不同世代的延迟会有所不同,但通过像这样动态适应它,只要处理开销小于0.03秒,您就会安全无虞。

您应该在第一个线程中也做同样的事情。


获取高分辨率时间戳 - 有苹果论坛here,或该stackoverflow question.