catやddなどの標準的なlinuxツールからデータを保持するバッファ付きパイプを構築することはできますか?遅延/バッファリングされたパイプを構築する方法は?
たとえば、定義された量のパケット、オーディオデータなどを収集する。
例: 16000のバイトが遅れて録音した音声を再生する
arecord | delaybuffer 16000 | aplay
:そのような何かをするためのスクリプトdelaybuffer
を構築します。
catやddなどの標準的なlinuxツールからデータを保持するバッファ付きパイプを構築することはできますか?遅延/バッファリングされたパイプを構築する方法は?
たとえば、定義された量のパケット、オーディオデータなどを収集する。
例: 16000のバイトが遅れて録音した音声を再生する
arecord | delaybuffer 16000 | aplay
:そのような何かをするためのスクリプトdelaybuffer
を構築します。
ジョブを実行するツールbuffer
があります。 (Link to the Debian package - 他のディストリビューションでも利用可能かもしれません)。
バッファは、共有メモリを使用して可変入力データレートを一定の出力データレートに変換します。
ありがとうございます。それはまさに私が考えたものです。ディスクベースのバッファを取得する可能性があるのではないかと疑問に思っていますか?したがって、例えばビデオデータの大きな遅延をバッファリングするために使用することもできます。 – dronus
通常、ほとんどのシステムではツールのインストールが必要な場合でも、これは答えと思います。しかし、単純な解決策がないと思われる。 – dronus
書き込み前にバッファがいっぱいになっていることを確認する必要がある場合は、使用する必要がある '-p'オプションがあります。同様に動作する 'mbuffer'というツールもあります。 – starfry
もう1つの方法はdd(バッファがあなたのdistに存在しない場合)です。
arecord | dd ibs=16000 iflag=fullblock oflag=dsync | aplay
私はフラグについては本当にわからない、ただ一度のブロックをバーストよりも、もっと良い方法があるかもしれません。
16000バイトのうち、どのバイトを読み込む必要がありますか?ゼロバイト?他に何か? delaybufferコマンドは、1回の読み出しで消費するバイト数をどのように知っていますか? – HonkyTonk
バッファプログラムは、16000バイト**を読み込むまで書き込むべきではないと言っていますか?規定のバイト数を読み終えたら、すべてのデータの書き込みを開始しますか? – tuxuday
これに注意してください。サイズが大きすぎるとパイプがいっぱいになり、 'arecord'の書き込みがブロックされ、チェーン全体が停止します。最近のLinuxカーネルの 'man 7 pipe'によると、パイプ容量は65535です。したがって、16000は安全ですが、これを大きすぎると破損することに注意してください。 – FatalError