Esta solução evitará escrever repetidamente em disco, e mesmo que no pior caso leve um segundo em vez do desejado em menos de meio segundo, descobri que ele é rápido o suficiente depois de experimentá-lo. Então, aqui estão os dois scripts que eu uso:
./ detect:
while true; do
arecord -d 1 /dev/shm/tmp_rec.wav ; sox -t .wav /dev/shm/tmp_rec.wav -n stat 2>\
&1 | grep "Maximum amplitude" | cut -d ':' -f 2 | ./check.py
if [ $? -eq 0 ] ; then
amixer set Master 0
else
amixer set Master 80
fi
done
./ check.py:
#!/usr/bin/env python
import sys
number = 0.0
thing="NO"
line = sys.stdin.readline()
thing = line.strip()
number = float(thing)
if number < 0.15:
raise Exception,"Below threshold"
Pouco elegante, mas funciona.
Nota: Se você quiser algo mais gradual, adicione algo assim:
for i in 'seq 0 80 | tac'; do
amixer set Master $i
done
para silenciar e
for i in 'seq 0 80'; do
amixer set Master $i
done
para ativar o som.