您会惊讶于我们的人耳在发现音频异常方面的能力...
同步一天中的时间
如果路上的事情非常多变(wifi等),您实际上是在尝试通过整个负载来满足实时要求。我强烈怀疑您要接近这样做的唯一方法是发出“播放”指令,其中包括开始播放的特定时间。当然,这依赖于准确设置所有时钟。
NTP
我不知道 iPhone 是如何获得一天中的时间的。如果他们使用(或可以使用)NTP,那么您将接近。NTP 旨在通过网络传送准确的时间信息,尽管网络延迟可变。我快速浏览了一下,似乎大多数 iOS NTP 客户端都是简单的,而不是测量和调整网络延迟、时钟漂移等的完整 NTP。
全球定位系统
另外,GPS 也是一个很好的时间信息来源。同样,我不知道 iPhone 是否可以或确实使用 GPS 来设置时钟,但如果可以做到,那可能会非常好。在 Solaris(我也认为是 Linux)上,大多数 GPS 芯片从 GPS 信号生成的每秒 1 个脉冲可用于调节内部操作系统时钟,使其确实非常准确(亚微秒精度)。
我担心 iPhone 本身不会做这些事情。两者都涉及使用相当多的电力,所以如果他们做了其他不那么复杂的事情,我不会感到惊讶。
小区时间服务
一些 Cell 网络也提供时间服务,但我认为它不是为准确的时间设置而设计的。此外,它往往并非随处可用。您经常在主要机场找到它,以便最近抵达的人将他们的手机设置为接近当地时间的时间。
在时间 X 播放
因此,如果其中之一可用于确保所有 iPhone 设置为一天中完全相同的时间,那么您所要做的就是编写软件以在特定时间开始播放。这可能需要在一个非常紧凑的循环中轮询时钟,等待它结束;大多数操作系统在特定时间之前不提供睡眠方式。他们至少允许睡眠一段时间,可以用来睡觉直到接近约定的时间。然后,您将开始轮询时钟,直到到达正确的时间。
延迟测量和标准偏差
我认为你的第一种方法注定要失败。您可能能够测量平均延迟等等,但这并不意味着每条消息都具有完全相同的延迟。延迟的标准偏差会告诉您可以期望达到的目标,我认为这不会特别小。如果是这样,则消息必须包含时间戳。
NTP 可以工作,因为它只对在一段时间内(有时是几个小时)测量的平均延迟感兴趣,而您对瞬时延迟感兴趣。
使用 RTP 流式传输
如果您可以如上所述对设备进行时间同步,则您的第二种方法可能会起作用。RTP 协议就是为这些情况而设计的;它对实现同步无济于事,但对流式传输确实有很大帮助。它会告诉您流中任何一条接收到的数据适合的位置,让您可以在正确的时间播放它。
时钟漂移
另一个需要处理的问题是你玩了多久。如果时间较长,您可能会发现每台设备上的 44kHz(或其他)音频时钟速率并不完全相同。因此,虽然您可能会找到一种同时开始播放所有设备的方法,但随后单独的设备将开始出现如此细微的差异。在很长一段时间内,它们可能会明显消失。
蓝牙
可以用蓝牙做一些事情。它有许多奇怪而精彩的配置文件,其中一个可能会用于发送准确的“现在开始”信息。
音频触发器
您也可以使用声音作为传达开始信号的一种方式。一台设备可以播放特定的声音,而其他设备中的软件正在使用麦克风收听。当在声音中检测到特定特征时,就是每个人都开始演奏的时候了。一种计算机化的“1, 2, a 1 2 3 4”。
相机闪光灯
应该很容易在软件中发现...