2017-08-08 17 views
1

rtl_fmとsoxを使ってmp3ファイルにfmステーションを保存しています。 rtl_fmをmp3に変換するために信号とsoxをキャプチャします。MP3ファイルを書き出しながら再生する

rtl_fm -M wbfm -f 88.1M -d 0 -s 22050k -l 310 | sox -traw -r8k -es -b16 -c1 -V1 - -tmp3 - | sox -tmp3 - some_file.mp3 

mp3を使用して書かれているようそれから私は、第二の端子に、そのファイルを再生しようとしています:

play -t mp3 some_file.mp3 

問題はそれだけでmp3が持っていた時間まで果たしているということです再生コマンドが呼び出された時点で

書き込み中に、追加されたmp3を時間の経過と共に再生するにはどうすればよいですか?

EDIT: はラズベリーパイ3(Raspianジェシー)上で実行、NooElec R820T SDR

答えて

1

物事のカップルがここにあります。私はsoxが "tailing"ファイルをサポートしているとは思わないが、私はmplayerを知っている。しかし、パイプラインをよりよく制御するためには、パイプラインに並列イベントストリームが組み込まれているため、gstreamerを使用することができます。

あなたはsoxに固執したい場合は、私が最初に例えば、soxの冗長2番目の呼び出しを取り除くでしょう:

rtl_fm -M wbfm -f 88.1M -d 0 -s 22050k -l 310 | 
sox -ts16 -r8k -c1 -V1 - some_file.mp3 

そして、それをトランスコードしながら、ストリームを再生するためには、あなたがそれを多重化することができtee、例えば:

rtl_fm -M wbfm -f 88.1M -d 0 -s 22050k -l 310 | 
tee >(sox -ts16 -r8k -c1 -V1 - some_file.mp3) | 
play -ts16 -r8k -c1 - 

それとも、彼らは別のプロセスになりたい場合:

# Save stream to a file 
rtl_fm -M wbfm -f 88.1M -d 0 -s 22050k -l 310 > some_file.s16 

# Encode stream 
sox -ts16 -r8k -c1 -V1 some_file.s16 some_file.mp3 

# Start playing the file at 10 seconds in 
tail -c+$((8000 * 10)) -f some_file.s16 | 
play -ts16 -r8k -c1 - 
+0

ありがとうございました!私は提案を試み、冗長なsoxコマンドを削除しました。 – spearna

+0

2番目の提案はうまくいきますが、再生と録音のコマンドがペアになっているので、私が試している機能を満たしていません。私はrtl_fm/soxコマンドパイプを使ってmp3ファイルにラジオfm信号を記録しています。次に、別のコマンドを使用して、私は(まだ書いている)mp3ファイルをユーザーが決めたファイルの開始点で再生しようとしています。このコマンドは、rtl_fm/soxレコードコマンドとは関係なく、複数回呼び出すことができ、必要な開始点を取得できます。 RECAP:1録音コマンド。 n再生コマンド – spearna

+0

私が元の投稿で無視したいくつかの重要な情報:Raspberry P3(Raspian Jessie)、NooElec R820T SDRで実行中 – spearna

関連する問題