2017-08-08 196 views
1

我正在使用rtl_fm和sox将FM电台保存到mp3文件。 rtl_fm捕获信号并将其转码为mp3。播放正在写入的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文件?

编辑: 运行在树莓派3(Raspian杰西),NooElec R820T SDR

回答

1

有几件事情在这里。我不认为sox支持“拖尾”文件,但我知道mplayer呢。但是,为了更好地控制管道,使用gstreamer可能是一条路,因为它在其效果管道中内置了并行事件流。

如果你想坚持sox,我想先摆脱sox冗余第二调用,例如:

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

您的第二个建议可行,但它不符合我试图配置播放和录制命令的功能。我正在使用rtl_fm/sox命令管道将无线电fm信号录制到mp3文件中。然后,使用单独的命令,我试图在用户确定的文件起点处播放(仍在写入)mp3文件。该命令可以多次调用,与rtl_fm/sox记录命令无关,以获取所需的起始点。 RECAP:1个录音指令; n播放命令 – spearna

+0

我在原始文章中忽略的一些其他重要信息:在Raspberry Pi 3(Raspian Jessie)上运行,NooElec R820T SDR – spearna