「sox」ユーティリティを2つのパイプコマンドに入れて、モノラルの44kHzオーディオファイルを16kHzオーディオファイルにリサンプリングしようとしています。
単一のパイプで正常に動作します:
$ speexdec toto.oga - | sox -V -t raw -b 16 -e signed -c 1 -r 44.1k - -r 16k toto.wav
しかし、onatherパイプを追加すると、soxユーティリティは不平を言います。
$ speexdec toto.oga - | sox -V -t raw -b 16 -e signed -c 1 -r 44.1k - -r 16k - | cat - > toto.wav
sox FAIL formats: can't determine type of `-'
何か案が ?
2番目の-t wav
の前に-
を追加して、sox出力のタイプを宣言する必要があります。
ファイル名の場合、soxはその名前をのぞき、そこから型を推定しますが、stdoutの場合は、型を宣言する必要があります。
また、入力から転送されると想定せずに、他のすべての設定(-b 16 -e signed -c 1
)も宣言することもできます。出力を指定する最後の-
より前のすべて。
toto.wav
などの明示的なファイル名を指定すると、SoXは.wav
拡張子からWAV形式を使用すると想定されます。 -
が出力「ファイル名」の場合、その推定は実行できないため、-t wav
でタイプを明示的に指定する必要があります。ファイルに別の拡張子(toto.sound
)を付けるか、まったく付けない(toto
)場合も、同じことが当てはまります。
無関係な注記として、WAVファイルは、ファイルの先頭に含まれるオーディオの長さを格納します。あなたの場合、ファイルのその部分がパイプに書き込まれるとき、最終的な長さはわかりません。したがって、「不明な長さ」を示す値が代わりに書き込まれます。これは、ファイルをどのように処理するかによって、問題になる場合とそうでない場合があります。