5

特定の時点でアクション (ラグなしで複数のデバイスで一度に曲を再生する) を実行する必要があります。私の要件は、アプリがインターネット接続を使用しないことです。したがって、データ(オーディオ)を再生する正確な時点が必要です]

私はすでに次のことを試しました:

  1. すべてのデバイスで 5 秒後に曲を再生します。(まだミリ秒の遅れが発生します)
  2. 小さなテキスト通知を送信して曲の再生を識別し、すべてのデバイスで再生を開始します。しかし、この通知の送受信にはミリ秒の時間がかかります:(:(
  3. すべてのデバイスで時間を自動に設定し、テキストメッセージの通過の時間差を確認しました。各テストにはミリ秒のギャップがあります。
4

2 に答える 2

6

最初に、2 つのデバイスの内部時刻を同期する必要があります。どうやらiOSで使用できる最も正確な時計は、次のようにして絶対時間です。

CFAbsoluteTime now = CFAbsoluteTimeGetCurrent();

次に、この時間をデバイスAからデバイスに送信Bし、デバイスで差を取得しBて に送り返しA、その差をネットワーク トランザクションで費やされた時間と比較する必要があります。このようにして、2 つのデバイスの時刻を非常に正確に同期させることができます。(これは、ネットワーク時間が要求と応答の間で対称的であり、 device での計算にあまりオーバーヘッドがないことを前提としていますB)。

ここに画像の説明を入力

そこから、簡単にAVAudioPlayerデバイスで 2 をインスタンス化し、曲を設定して呼び出しprepareToPlay、最後に同期の遅延に従って再生メソッドを起動できます。これにより、目立たない精度が得られるはずです。

あなたが取ることができる別のルートはAudioUnit、マイクに接続された2番目のデバイスに を配置して、最初のデバイスが発した音に応じて音楽を同期することです.

于 2013-10-15T11:48:45.980 に答える