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 /ディストリビューションに応じて)に追加することです。