システム クロック ( time.time()
) を参照する他の信号を使用するアプリケーションがあり、オーディオ入力を記録して、他の信号と比較していつ発生したかを把握したいと考えています。
最初は、コールバック API を使用してみました。サウンド カードからデータが利用可能になったときにコールバック API が発生するだろうと考えていました。コールバックは、おおよそサンプル期間 * サンプル数の差で定期的に発生すると予想されますが、他の人が指摘したように、そうではありません。
データが最初に利用可能になったときに返されるのではないかと考えて、ブロッキング API も試しましたが、同じ問題があるようです。には adc クロックの概念もありportaudio
、これはコールバック モードで提供され、おそらく必要な情報を提供する他のクロックに関連していますcurrent_time
。input_buffer_adc_time
しかし、これらの値は両方とも通常ゼロであり (マザーボードからのデフォルトのマイク入力を備えた Ubuntu 14、使用している下位レベルの API がわからない)、そのうちの 1 つがゼロ以外の場合があります。
portaudio
これが で達成できない場合は直接使用しても構わないと思っていますpyaudio
が、サンプル (特定のサンプルではなく、任意のサンプル) がいつ発生したかtime.time()
を 100 マイクロ秒単位 (posix エポック時間)で把握できるようにする必要があります。またはそれ以上。pyaudio
から多くのオプションを隠しているようportaudio
です。
また、このタイミングには 2 つの要素があることにも注意してください。あるイベントを記録し、1 時間後に別のイベントを記録すると、システム クロックによると、これら 2 つのイベントがどれだけ離れているかがわかります。私が取得するシステム時間が実際のイベントの後に一貫して1ミリ秒になるなど、おそらく短期間の遅延効果もあります。長期的な部分が機能するようになったら、その遅延を直接測定できます。
編集:この問題について説明しているこの論文を見つけました。current_time
とがこれを行うための推奨される方法の ように聞こえるinput_buffer_adc_time
ので、実際にこの情報が機能する別の基になる API を使用する方法を理解する必要があるのではないでしょうか?