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

pipe sox play command to stdout

所以我目前正在尝试从我的 raspberry pi (rasbian) 流式传输我的微型 phone 输入 到某种网络流,以便稍后在我的 phone 上接收它。 为了做到这一点,我使用 arecord -D plughw:1,0 -f dat -r 44100 | top pipe 从我的 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 参数可以增加音量。 这会将录制的流播放到我连接到 raspberry pi 3 .

的扬声器

最终目标: 将音量增加的声音流通过管道传输到标准输出(或一些 fifopipe 文件),这样我就可以从另一个脚本中的标准输入中获取它,并将其发送到我的 phone.

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

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

据我所知,您无法通过管道传输 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 -