@ O comentário do CL. foi a solução: canalizar o áudio através do stdout e deixar o sistema operacional manipular o arquivo.
O artigo completo está aqui , mas a resposta para esse problema específico é:
arecord --device=hw:CARD=X18XR18,DEV=0 --channels=18 --file-type=raw --format=S32_LE --rate=48000 --buffer-time=20000000 > "$REC_FILE" 2> >(ts -s >&2) &
O std de 2> >(ts -s >&2)
nos tubos de final arecord
para stdin de ts
e stdout de ts
para o stderr do script. O script de chamada canaliza o stderr deste script para um arquivo de log.
ts
adiciona um registro de data e hora a cada linha de seu stdin e imprime o resultado em sua stdout. Então, quando eu olho para o arquivo de log, eu posso ver se houve algum problema, e se houve, onde procurar falhas / pops na gravação multi-track de várias horas.
Em seguida, para converter o arquivo bruto em um conjunto de WAVs mono completos:
TRACKS=18
CHANNEL=$TRACKS
while [ $CHANNEL -ge 1 ]
do
FILENAME=track$CHANNEL.wav
sox --type raw --bits 32 --channels $TRACKS --encoding signed-integer --rate 48000 --endian little all_tracks.raw $FILENAME remix $CHANNEL
CHANNEL='expr $CHANNEL - 1'
done
Você pode adicionar alguns echo
s para informar o andamento. Isso tende a demorar um pouco.