2

信頼できるタイムレコーダーを手に入れるために、奇妙に思えるかもしれない何かをすることを考えています。バッファリングやオーディオタイムスタンプアービトレーションを単独で実行しないWiFi接続のオーディオ出力デバイスにバッファをプッシュする必要があります。ハードウェアサンプラーデバイスのタイミングと合理的に一致する定期的な間隔でバッファーを送信しないと、再生が破損し、途切れ始めます。

以下で説明する「ハック」を検討する前に、まず高解像度のタイミングを実行するための通常の容疑者を調べました。QueryPerformanceCounterは、Harddware Abstraction Layerでのバグのあるハードウェア実装と、QPC計算を台無しにする可変CPU速度ステッピングの複雑さについて読むまでは良さそうに見えました。また、Windowsマルチメディアタイマーは1ミリ秒までしか正確ではないため、44.1kHzのような高いサンプリングレートでの使用は疑わしいものです。そのため、私は次のことを検討しています。

CPUクロック周波数、したがってQueryPerformanceCounterが間違っていますか?

私の知る限り、現在製造されているすべてのWindows PCには、少なくともマイクのハードウェアサポートがあります。私が検討しているのは、既存のキャプチャデバイスのクロックを「ピギーバック」することです。WiFiオーディオ出力デバイスに送信されるオーディオの真のソースであるDirectShowプッシュソースフィルターがあります。キャプチャフィルターのサンプルレートをプッシュソースフィルターと一致させるように強制します。次に、セマフォを使用して、キャプチャフィルターのFillBuffer()呼び出しがバッファーを生成し、それによってキャプチャフィルターのバッファータイミングに乗るまで、プッシュソースフィルターのFillBuffer()呼び出しをロックします。

少なくとも1つのキャプチャデバイスを備えたユーザーのPCを信頼できますか?また、全体的な戦略についてのコメントをいただければ幸いです。

4

1 に答える 1

3

システム リファレンス クロックは、約ミリ秒の精度を持つ信頼性の高いクロックであり、DirectShow キャプチャ デバイスの有無にかかわらず、どの PC でも使用できます。

対処している可能性のある問題は、tghis クロックがオーディオ キャプチャまたは再生デバイスのクロックと正確に一致しないことであり、ストリーミングされた長時間のサウンドは、クロックの不一致によるエラーを蓄積します。DirectShowレート マッチングは、この問題に対処するものです。

一方、より高い精度/精度の優れた時計が必要な場合は、バックアップされQueryPerformanceCounterているが定期的に再同期されている時計を使用して、長期的な精度を維持できます。クラス DateTimePreciseを参照してください。

また:

于 2011-11-20T07:06:49.117 に答える