Eu uso o seguinte script para monitorar meu microfone:
while true; do
printf "$(AUDIODEV=hw:2,0 rec -n stat trim 0 1 2>&1 |
awk 'BEGIN { ORS="" } /^Maximum amplitude/ { print "Max. amplitude: "$3}
/^Rough\s+frequency/ { print " Frequency: "$3}
/^Maximum\s+delta/ { print " Max. delta: "$3}')\r";
done
Ele registra um segmento com 1 segundo de duração, extrai valores de Maximum amplitude
e Rough frequency
da saída padrão sox
e os imprime.
Posso salvar um segmento em arquivo se seu volume ou frequência for maior que um limite específico? Sei que posso salvar cada segmento e depois analisá-lo, mas haverá muitas operações de gravação, o que quero evitar.
Eu encontrei uma solução nesse meio tempo. Baseia-se na canalização da saída de
rec
parabase64
que possa ser codificada em ASCII e armazenada em uma variável bash. Se for hora de analisar o volume e a frequência do segmento, corrobase --decode
na variável de conteúdo. No script abaixo apenas o volume é analisado. Se ultrapassar o limite (0,6)handleExcess
é chamado e o segmento é salvo. Também aumentei a duração do segmento para 5 segundos.