サウンドの再生とシリアル ポート経由でのデータの受信を処理する標準 Linux-OS のタイミングに関して、より一般的な質問があります。
現時点では、FPGA から記録、エンコード、送信された USB-to-Serial Bridge (pl2303) 経由で到着する PCM 信号を読み取っています。
ここで、録音されたサウンドストリームの既知の位置に「ピーク」を作成する必要があり、既知の時点で録音されている同じマシンからサウンドファイルを再生する予定です。ピークは最大 50 ミリ秒のウィンドウ内で開始および停止する必要があり、その長さは最大 200 ミリ秒になる可能性があります...
さて、私の質問は次のとおりです。タイミングはどの程度正確であると期待できますか? 私は、いくつかのコンポーネントが「未知のラグ」、ジッターを追加することを知っています:
- USB-to-Serial Bridge は、USB 側に送信する前にシリアル側から ~20 バイトを収集します (230400 ボーで、これは ~1ms になります)。
- "`sleep 1; mpg123 $MP3FILE` &" を録音ソフトウェアの直前に呼び出すと、Linux カーネルはそれらを別の方法でスケジュールします (システムの負荷によっては、これにより数 10 ミリ秒かかる可能性があります?)
- サウンドカード/ドライバーは、未知のラグをさらに追加する可能性があります...
- 私の場合、「nice」や「sched_setscheduler」などのトリックは価値がありますか?
- サウンドを再生する録音ソフトウェア内に追加のスレッドを構築することができました。こうすることで、タイミングはより正確になるかもしれませんが、やるべきことはもっとたくさんあります...
どうもありがとう。
とにかく試してみますが、今後の問題をよりよく理解し、解決するための背景知識を探しています。