2017-08-08 199 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