2012-04-24 10 views
3

catやddなどの標準的なlinuxツールからデータを保持するバッファ付きパイプを構築することはできますか?遅延/バッファリングされたパイプを構築する方法は?

たとえば、定義された量のパケット、オーディオデータなどを収集する。

例: 16000のバイトが遅れて録音した音声を再生する

arecord | delaybuffer 16000 | aplay 

:そのような何かをするためのスクリプトdelaybufferを構築します。

+0

16000バイトのうち、どのバイトを読み込む必要がありますか?ゼロバイト?他に何か? delaybufferコマンドは、1回の読み出しで消費するバイト数をどのように知っていますか? – HonkyTonk

+0

バッファプログラムは、16000バイト**を読み込むまで書き込むべきではないと言っていますか?規定のバイト数を読み終えたら、すべてのデータの書き込みを開始しますか? – tuxuday

+0

これに注意してください。サイズが大きすぎるとパイプがいっぱいになり、 'arecord'の書き込みがブロックされ、チェーン全体が停止します。最近のLinuxカーネルの 'man 7 pipe'によると、パイプ容量は65535です。したがって、16000は安全ですが、これを大きすぎると破損することに注意してください。 – FatalError

答えて

5

ジョブを実行するツールbufferがあります。 (Link to the Debian package - 他のディストリビューションでも利用可能かもしれません)。

バッファは、共有メモリを使用して可変入力データレートを一定の出力データレートに変換します。

+0

ありがとうございます。それはまさに私が考えたものです。ディスクベースのバッファを取得する可能性があるのではないかと疑問に思っていますか?したがって、例えばビデオデータの大きな遅延をバッファリングするために使用することもできます。 – dronus

+0

通常、ほとんどのシステムではツールのインストールが必要な場合でも、これは答えと思います。しかし、単純な解決策がないと思われる。 – dronus

+0

書き込み前にバッファがいっぱいになっていることを確認する必要がある場合は、使用する必要がある '-p'オプションがあります。同様に動作する 'mbuffer'というツールもあります。 – starfry

5

もう1つの方法はdd(バッファがあなたのdistに存在しない場合)です。

arecord | dd ibs=16000 iflag=fullblock oflag=dsync | aplay 

私はフラグについては本当にわからない、ただ一度のブロックをバーストよりも、もっと良い方法があるかもしれません。

関連する問題