在写入时播放 MP3 文件

问题描述 投票:0回答:1

我正在使用 rtl_fm 和 sox 将调频电台保存到 mp3 文件。 rtl_fm 捕获信号,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?

编辑: 在 Raspberry Pi 3 (Raspian Jessie)、NooElec R820T SDR 上运行

linux mp3 sox software-defined-radio
1个回答
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 -
© www.soinside.com 2019 - 2024. All rights reserved.