SoXから使用soxして、短い音声サンプルを分析します。
sox -t .wav "|arecord -d 2" -n stat
-t .wav我々はwavファイルの種類を処理指定し、"|arecord -d 2"実行しarecord 、2秒間のプログラムを-nヌルファイルに出力してstat、私たち私たちは、統計を望んで指定します。
このコマンドの出力は、私のシステム上でバックグラウンドスピーチを使用した場合、次のとおりです。
Recording WAVE 'stdin' : Unsigned 8 bit, Rate 8000 Hz, Mono
Samples read:             16000
Length (seconds):      2.000000
Scaled by:         2147483647.0
Maximum amplitude:     0.312500
Minimum amplitude:    -0.421875
Midline amplitude:    -0.054688
Mean    norm:          0.046831
Mean    amplitude:    -0.000044
RMS     amplitude:     0.068383
Maximum delta:         0.414063
Minimum delta:         0.000000
Mean    delta:         0.021912
RMS     delta:         0.036752
Rough   frequency:          684
Volume adjustment:        2.370
最大振幅は、次の方法で抽出できます。
grep -e "RMS.*amplitude" | tr -d ' ' | cut -d ':' -f 2
私たちは、grep私たちが望むラインのために、使用trスペース文字を切り取るために、その後、cutそれをすることによって:、文字、私たちを与える第二部取り0.068383、この例では。コメントで示唆されているように、RMSは最大振幅よりもエネルギーの優れた尺度です。
最終的にbc結果を使用して、コマンドラインからの浮動小数点値を比較できます。
if (( $(echo "$value > $threshold" | bc -l) )) ; # ... 
1分間スリープを呼び出し、ボリュームをテストしてから繰り返すループ(Bashの例を参照)を作成する場合、バックグラウンドで実行したままにすることができます。最後の手順は、手動で起動する必要がないように、initスクリプトまたはサービスファイル(OS /ディストリビューションに応じて)に追加することです。