如何在2个或更多ios设备上同步音频

时间:2013-10-11 09:15:23

标签: iphone ios

我必须在给定的时间点执行动作(在多个设备上一次播放没有延迟的歌曲)。我的要求是应用程序不应使用任何互联网连接。所以我需要一个确切的时间来播放数据(音频)]

我已经尝试过以下内容:

  1. 在所有设备上播放5秒钟后的歌曲。 (仍然导致滞后毫秒)
  2. 发送小文本通知以识别播放歌曲,然后开始在所有设备上播放。但是发送和接收此通知需要几毫秒的时间:(:(
  3. 在所有设备上设置自动时间,然后检查短信传递的时差,每次测试都有毫秒差距。

2 个答案:

答案 0 :(得分:6)

首先,您需要同步2个设备的内部时间。 显然,iOS上最准确的时钟就是绝对时间:

CFAbsoluteTime now = CFAbsoluteTimeGetCurrent();

然后您需要将此时间从设备A发送到设备B,检索设备B上的差异并将其发送回A,然后将其与在网络交易中花费的时间。通过这种方式,您可以非常精确地同步2个设备的时间。 (假设网络时间在请求和响应之间是对称的,并且您在设备B上的计算没有太多开销。)

enter image description here

从那里你可以轻松地在设置歌曲的设备上实例化2 AVAudioPlayer并调用prepareToPlay,最后根据同步延迟激活播放方法。 这应该会给你一个不明显的精确度。

您可以采取的另一种方法是在连接到麦克风的第二台设备上放置AudioUnit,以便将音乐与第一个设备发出的声音同步。

答案 1 :(得分:1)

已知问题

睡觉或等待非常精确的时间间隔时,定时器可能会延迟最多1毫秒。

供参考: https://developer.apple.com/library/ios/releasenotes/General/RN-iOSSDK-7.0/