この解決策により、ディスクへの繰り返し書き込みが回避されます。最悪の場合、必要な 0.5 秒未満ではなく 1 秒かかりますが、試してみると十分に高速であることがわかりました。そこで、私が使用する 2 つのスクリプトを次に示します。
./検出:
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"
エレガントではありませんが、機能します。
注:もっと段階的なものが必要な場合は、次のようなものを追加してください:
for i in `seq 0 80 | tac`; do
amixer set Master $i
done
ミューティングと
for i in `seq 0 80`; do
amixer set Master $i
done
Python スクリプトと TALKING_PERIOD を使用しないバージョンのみで、DOWN_SOUND_PERC レベルで何秒間鳴るかを設定してから、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
完了
busybox と bash だけの Linux ディストリビューションですか?
Linux は通常の Time Machine スパース バンドル ディスク イメージ ディレクトリをマウントできますか?