レコードのwav出力をflacに変換しようとしていますが、部分的には機能します。
pi@raspberrypi /tmp $ arecord -d4 -f dat -t wav -r 48000 -c 2 |flac -f -o message.flac - --channels=1 --sample-rate=16000
mplayerによって有効なflacファイルとして認識および再生されるファイルを作成します。
pi@raspberrypi /tmp $ mplayer message.flac
==========================================================================
Opening audio decoder: [ffmpeg] FFmpeg/libavcodec audio decoders
libavcodec version 53.35.0 (external)
Mismatching header version 53.32.2
AUDIO: 48000 Hz, 2 ch, s16le, 125.8 kbit/8.19% (ratio: 15723->192000)
Selected audio codec: [ffflac] afm: ffmpeg (FFmpeg FLAC audio)
==========================================================================
しかし、結果として16kHzの1チャンネルトラックが欲しいとflacに正しく伝える方法がわかりません。プレーンな「-」の代わりに-dを使用すると、受け入れられません。
レコードチャンネル/レートをターゲット設定に設定しない理由を尋ねられるかもしれません-答えは、そうすると、キャプチャされるサウンドの品質がひどくなり、低い設定でsox/flacを介してflacに変換されるということですはるかに良い。
最初は、wavをflacに再コード化せずに、soxを使用してflacを記録したかったのですが、セグメンテーション違反が発生し、これを克服する方法がまだ見つかりませんでした。
Flacエンコーダーは間違いなくサンプルレート/ビット深度の変換を行いません。ただし、soxはその場でこれを行うことができます。これを試してみてください:
arecord -d4 -f dat -t wav -r 48000 -c 2 | sox - -b16 -r16k -c1 -t wav - | flac - -o message.flac
Soxの引数は次のとおりです。
-
stdinを使用-b16
出力ビット深度-r16k
出力16kHzサンプルレート-c1
1つのチャネルを出力します-t wav
wav出力形式を指定します-
結果をstdoutに送信するflac
への入力はすでに16kHzであるため、入力サンプルレートを指定する必要はありません。