0

常にデータを出力する USB オーディオ デバイス (複数のチャネルを備えた HID) を操作します。

私が達成したいのは、デバイスから信号が来るまでオーディオを無視することです。その時点で、フィードの監視を開始します。デバイスからの 2 番目の信号は、データの無視に戻ることができることを示します。上記のデバイスをノンブロッキング モードで開いたので、他の USB 信号が入ってくるのを妨げません。

これは正常に動作していますが、( 経由で) データの読み取りを開始するとsnd_pcm_readi、バッファ オーバーランを示す EPIPE エラーが発生します。snd_pcm_prepareこれは毎回呼び出すことで修正できますが、バッファを無視している間にバッファを空にする方法があることを願っています。

私は見ましたがsnd_pcm_drainsnd_pcm_dropこれらはPCMを停止し、むしろ開いたままにします。

提案?

4

1 に答える 1

3

バッファ オーバーランを無視するには、PCM デバイスのソフトウェア パラメータを変更します。停止しきい値を境界と同じ値に設定します。その構成では、オーバーランによってデバイスが停止することはありませんが、引き続きバッファがいっぱいになります。(他のエラーでもデバイスは停止します。USB デバイスが取り外されていると、続行するのが難しくなります...)

オーバーランが発生すると、バッファには実際に収まるよりも多くのデータが含まれます。つまり、snd_pcm_availバッファ サイズよりも多くの使用可能なフレームが報告されます。

実際に記録を開始したい場合は、snd_pcm_forwardこれらの無効なフレームをすべて破棄するために呼び出します。

于 2013-02-28T20:22:33.867 に答える