【发布时间】:2011-05-15 05:36:06
【问题描述】:
大家好,我有一种录制方法,可以将用户播放的音符实时写入数组。唯一的问题是有轻微的延迟,播放时每个序列都明显变慢。我将播放速度提高了大约 6 毫秒,听起来不错,但我想知道延迟是否会在其他设备上有所不同?
我在 ipod touch 2nd gen 上进行了测试,它在 3rd、4th 和 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.03 秒”?你说它不是计时器,那么你如何确定已经过去了适当的时间(自旋循环检查时钟?)
-
这几乎与苹果的节拍器示例完全相同。
-
NSDate *curtainTime = 日期 + xyz 秒,然后是 NSDate *currentTime = 日期。然后睡眠 xyz 秒,直到 currentTime > 比窗帘
标签: iphone xcode audio delay record