コマンドラインオーディオ - 同時再生と録音のためのパイプライン

コマンドラインオーディオ - 同時再生と録音のためのパイプライン

サウンドデータを作成して変換し、WAV形式で保存しようとしています。ほぼ全部来ました。しかし、生成された音を聞きたいです。しかし、「録画」中です。

このコマンドはデータを生成して再生します。

perl -e 'for ($c=0; $c<4*44100; $c++) {
             $k=1*sin((1500+$c/16e1)*$c*22e-6); print pack "f", $k;
         } ' |
aplay -t raw -c 1 -r 44100 -f FLOAT_LE

(サウンドの再生が停止した後、Ctrl-Cを押すとaplayセグフォルトが発生することがあります。)

soxとを使用するとうまくmplayer録音できますが、同時に音は聞こえません。

perl -e 'for ($c=0; $c<4*44100; $c++) {
             $k=1*sin((1500+$c/16e1)*$c*22e-6); print pack "f", $k;
         } ' |
sox -V -r 44100 -c 1 -b 32 -e floating-point -t raw - \
    -c 2 -b 16 -t wav - trim 0 3 gain -1 dither |
mplayer - -cache 8092 -endpos 3 -vo null -ao pcm:waveheader:file=test.wav

play test.wav(s以外のパッケージplayの場所)はファイルの「Duration:00:00:03.00」を宣言します。また、プロセスがリアルタイムより速く実行されるようです。つまり(明らかに)3秒以内に完了します。soxalsaaplaytest.wav

以下を使用してストリームをディスクにキャプチャし、不正tee行為を行います。

perl -e 'for ($c=0; $c<4*44100; $c++) {
             $k=1*sin((1500+$c/16e1)*$c*22e-6); print pack "f", $k;
         } ' |
sox -V -r 44100 -c 1 -b 32 -e floating-point -t raw - \
    -c 2 -b 16 -t wav - trim 0 3 gain -1 dither |
tee test.wav |
aplay

明らかに、ここで生成された音が聞こえ、音も再生test.wavされますが、play test.wav「期間:不明」が報告されます。

だから尋ねたいです。上記の「one-liner」コマンドと同様の操作を実行して、サウンドを作成、再生、および録音できますか?同時に- しかし、いいえインストールする必要がありますかjack

PS:いくつかの関連リンク:

ベストアンサー1

たとえば、tee(1) を使用してストリームを再利用できます。

perl -e 'for ($c=0; $c<4*44100; $c++) {
  $k=1*sin((1500+$c/16e1)*$c*22e-6); print pack "f", $k;
}' | tee >(sox -c1 -r44100 -t f32 - test.wav) \
         >(sox -c1 -r44100 -t f32 - -d) > /dev/null

ほとんどのトーンとスイープを生成できるRed Sox Synth Effectsにも興味があるかもしれません。

sox -n -r 44100 test.wav synth 4 sine 100:1000

おすすめ記事