管道 sox 播放命令到标准输出

spa*_*unk 3 linux audio pipe stream sox

所以我目前正在尝试将我的麦克风输入从我的树莓派(rasbian)流式传输到某种网络流,以便稍后在我的手机上接收它。为了做到这一点,我使用arecord -D plughw:1,0 -f dat -r 44100 |顶部管道将声流从我的 USB 麦克风传输到标准输出,据我所知,它工作正常,但我需要声音大一点,这样我才能理解站在远处的人。

所以我通过管道将它传递给 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 参数可以增加音量。这会将录制的流播放到我连接到 raspberry pi 3 的扬声器。

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

但是,我对播放命令http://sox.sourceforge.net/sox.html的联机帮助页感到非常困惑

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

Aks*_*elA 7

据我所知,您不能通过管道从 输出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 -
Run Code Online (Sandbox Code Playgroud)

在您问题中的命令的情况下,更改playsox并添加应该足以-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 -
Run Code Online (Sandbox Code Playgroud)