pipe sox play命令到stdout

时间:2017-03-20 13:08:14

标签: linux audio stream pipe sox

所以我正在尝试从我的覆盆子pi(rasbian)流式传输麦克风输入 到某种网络流,以便稍后在我的手机上接收它。 为了做到这一点,我使用arecord -D plughw:1,0 -f dat -r 44100 |顶管将我的usb-microphone中的声音流传输到stdout,尽管我可以看到它工作得很好但我需要它有点大声以便我能理解远离我的人它。

所以我把它传递给这样的sox play命令:

arecord -D plughw:1,0 -f dat -r 44100| play -t raw -b 16 -e signed -c 2 -v 7 -r 44100 - test.wav (test.wav只是一些随机的wav文件id不能没有它,并且在44100和test.wav之间有一个空格,因为我觉得 - 是一个单独的参数:

SPECIAL FILENAMES (infile, outfile): - Pipe/redirect input/output (stdin/stdout); may need -t -d, --default-device Use the default audio device (where available)

我通过使用-v参数计算出来可以增加音量。 这将录制的流播放到连接到树莓派3的扬声器。

最终目标:管道音量增加声音流到stdout(或一些fifopipe文件)所以我可以从另一个脚本中的stdin获取它以将其发送到我的手机。

但是我对播放命令http://sox.sourceforge.net/sox.html

的联机帮助页非常困惑

我需要选择输出设备来管道或粗壮或东西
如果你知道一个更好的方法来增加我认为Recording WAVE 'stdin' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo声音流的voulme让我知道

1 个答案:

答案 0 :(得分:4)

据我所知,你无法管道play的输出,你必须使用常规sox命令。 例如:

# example sound file
sox -n -r 48k -b 16 test16.wav synth 2 sine 200 gain -9 fade t 0 0 0.1

# redundant piping
sox test16.wav -t wav - | sox -t wav - gain 8 -t wav - | play -

如果您的问题中包含该命令,则将play更改为sox并添加-t wav就足以让sox知道您想要管道声音的格式。

arecord -D plughw:1,0 -f dat -r 44100 | \
sox -t raw -b 16 -e signed -c 2 -v 7 -r 44100 - -t wav -