sox
é provavelmente o único programa do Linux que continua a me frustrar. Ao mesmo tempo, estou impressionado com o que ele pode fazer, e gostaria de estar perto de ser fluente nisso, se não dominar isso.
Hoje, passei cerca de duas horas tentando obter sox
para ler bytes de parec
por meio de um pipe.
Os parec
bytes são% pulseaudio
"coletor". Para fazê-los fluir pelo pipe, usei esta resposta do askubuntu
Este é o comando que estou usando:
$ 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
e este é o erro que recebo:
sox FAIL formats: can't determine type of '-'
write() failed: Broken pipe
Além disso, oggenc os analisa bem:
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)
Não tenho absolutamente nenhuma ideia de como fazer sox
digerir esses bytes.
$ parec -d telephonControl.monitor >> somebytes
$ soxi somebytes
soxi FAIL formats: can't determine type of file 'somebytes'
Mas eu sei que eles são áudio bruto, 16 bits assinados little endian, 2 canais 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"