Solusi ini akan menghindari penulisan berulang kali ke disk, dan meskipun dalam kasus terburuk membutuhkan waktu satu detik, bukan kurang dari setengah detik yang diinginkan, saya merasa cukup cepat setelah mencobanya. Jadi, inilah dua skrip yang saya gunakan:
./deteksi:
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"
Hampir tidak elegan, tetapi berhasil.
Catatan:Jika Anda menginginkan sesuatu yang lebih bertahap, tambahkan sesuatu seperti ini:
for i in `seq 0 80 | tac`; do
amixer set Master $i
done
untuk menonaktifkan dan
for i in `seq 0 80`; do
amixer set Master $i
done
untuk mengaktifkan suara.
Hanya versi tanpa skrip python dan TALKING_PERIOD, yang mengatur berapa detik suara akan terdengar pada level DOWN_SOUND_PERC, lalu naik ke level UP_SOUND_PERC.
#!/bin/bash
TALKING_PERIOD=16
UP_SOUND_PERC=65
DOWN_SOUND_PERC=45
counter=0
while true; do
echo "counter: " $counter
if [ "$counter" -eq 0 ]; then
nmb=$(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)
echo "nmb: " $nmb
if (( $(echo "$nmb > 0.3" |bc -l) )); then
echo "ticho"
amixer -D pulse sset Master 45%
counter=$TALKING_PERIOD
else
echo "hlasno"
amixer -D pulse sset Master 65%
fi
fi
if [[ $counter -gt 0 ]]; then
((counter--))
fi
sleep 1
selesai
Distro Linux hanya dengan busybox dan bash?
Bisakah Linux me-mount direktori disk image bundel Time Machine yang jarang?