嘿所有,我有一种录制方法,可以将用户实时播放的音符写入数组。唯一的问题是稍有延迟,每个序列在播放时明显减慢。我将播放速度提高了约6毫秒,听起来不错,但我想知道其他设备的延迟是否会有所不同?
我已经在ipod touch 2nd gen上进行了测试,如何在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.
我缺少的显而易见的事情就是在比赛之前创造两个日期...
D'OH!
答案 0 :(得分:4)
我觉得更有可能的是,附加延迟是由音符的播放或第二个线程中的其他计算开销引起的。在播放每个音符之前,抓住第二个线程中的挂钟时间,并检查与最后一个音符的时差。您将需要减少以下延迟(可能是0.006秒!)。
iphone的不同代的延迟会有所不同,但是通过这样动态调整它,只要处理开销小于0.03秒,你就会安全。
你也应该在第一个帖子中做同样的事情。
获取高分辨率时间戳 - 有关苹果论坛here或此stackoverflow question.
的讨论