2

私は C# と DirectSound を使用してオーディオを録音し、ローカル ネットワーク経由でデータを受信して​​ wave ファイルに保存する別のコンピューターに送信しています。

録音にも同様のコードを使用し、Wave ファイルの保存にも同様のコードを使用しました (NAudio を使用)。

受信したすべてのバイトをウェーブ ファイルに保存することは機能します。しかし、複数のコンピューターからオーディオを受信し、それを 1 つの wave ファイルにマージしたいと考えています。

クライアントごとに 1 つずつ、2 つの別個の wave ファイルを記録してから、それらをマージしようとしました。ただし、私の単純なアプローチでは、同期の手段は提供されません。結果の wave ファイルの長さが少なくとも 5 秒異なり、適切にマージできません。

だから、ここに私の質問があります:

1) ネットワークから受信したオーディオ バイトを取得し、Wave ファイルに保存して、結果のファイルが正しい時間にオーディオを再生するようにするにはどうすればよいですか?

たとえば、100 秒間の音声を録音し、ネットワーク経由で送信します。ただし、実際に録音されるのは 95 秒のオーディオ バイトだけです。欠落している 5 秒は、パケットの送信中に発生する小さな遅延が累積した結果です。

では、この 95 秒間のオーディオを適切なタイミング (100 秒間) に同期して再生するにはどうすればよいでしょうか?

2) 複数のクライアントから受信したオーディオ バイトを混合して、すべてのクライアントのオーディオを同期して再生する単一の wave ファイルを取得するにはどうすればよいですか?

質問を明確にする必要がある場合はお知らせください。助けていただければ幸いです。

4

2 に答える 2

3

参加しているコンピューターで高精度の時刻同期が必要です (さらに、送信されたパケットのタイムスタンプも必要です)。クロックのずれを最小限に抑えるには、あらかじめ決められた間隔で再同期するか (あまり推奨されません)、マシンに高品質のハードウェア クロックをインストールします (推奨)。これらのマシンがローカル ネットワーク上にある場合、1 台を NTP サーバーとして設定し、他をクライアントとして設定すると、十分に同期されたクロックが得られます (つまり、互いに .000001 秒以内またはそれ以上)。

于 2012-05-06T05:26:16.090 に答える