ixt*_*lix 6 pipe audio pulseaudio sox
sox
可能是继续让我沮丧的一个 linux 程序。同时,我对它的功能感到敬畏,如果不能精通它,我希望能接近流利地使用它。
今天,我花了大约 2 个小时试图通过管道sox
读取字节parec
。
所述parec
字节是一个pulseaudio
“汇”。为了让它们流过管道,我使用了 askubuntu 的这个答案。
这是我一直在使用的命令:
$ parec -d telephonControl.monitor | sox -b 16 -e signed -c 2 -r 44100 - -t pulse hmm.ogg silence 1 0.50 0.1% 1 2.0 0.1% : newfile : restart
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
sox FAIL formats: can't determine type of `-'
write() failed: Broken pipe
Run Code Online (Sandbox Code Playgroud)
更重要的是,oggenc 可以很好地解析它们:
parec -d telephonControl.monitor | oggenc -b 192 -o telephonControl.ogg --raw -
Encoding standard input to
"telephonControl.ogg"
at approximate bitrate 192 kbps (VBR encoding enabled)
Run Code Online (Sandbox Code Playgroud)
我完全不知道如何sox
消化这些字节。
$ parec -d telephonControl.monitor >> somebytes
$ soxi somebytes
soxi FAIL formats: can't determine type of file `somebytes'
Run Code Online (Sandbox Code Playgroud)
但我知道它们是原始音频,16 位有符号小端,2 通道 44100kHz:
$pacmd
>>> list-sink-inputs
1 sink input(s) available.
index: 17
driver: <protocol-native.c>
flags:
state: RUNNING
sink: 2 <telephonControl>
volume: 0: 100% 1: 100%
0: 0.00 dB 1: 0.00 dB
balance 0.00
muted: no
current latency: 92.86 ms
requested latency: 23.20 ms
sample spec: s16le 2ch 44100Hz
channel map: front-left,front-right
Stereo
resample method: (null)
module: 7
client: 53 <ALSA plug-in>
properties:
media.name = "ALSA Playback"
application.name = "ALSA plug-in"
native-protocol.peer = "UNIX socket client"
native-protocol.version = "26"
application.process.id = "3609"
application.process.user = "alec"
application.process.host = "ROOROO"
window.x11.display = ":0"
application.language = "en_GB.UTF-8"
application.process.machine_id = "eec7c6ae60f90bb3921ad16d0000302d"
application.process.session_id = "eec7c6ae60f90bb3921ad16d0000302d-1345384044.64188-1149507345"
module-stream-restore.id = "sink-input-by-application-name:ALSA plug-in"
Run Code Online (Sandbox Code Playgroud)
该-t
选项需要出现在它适用的文件名之前。此外,-t pulse
意味着直接从(或写入)PulseAudio 守护进程读取;它不是这样的文件格式。原始音频的类型名称是raw
.
尝试这个:
parec ... | sox -t raw -b 16 -e signed -c 2 -r 44100 - hmm.ogg ...
Run Code Online (Sandbox Code Playgroud)
(其中的...
意思是保持与之前相同的论点)
soxi
无法识别文件类型,因为它所做的只是查看标题。原始音频没有标题供它查看。