sox -t .wav "|arecord -d 2" -n stat
sox
ではwavタイプを処理すると指定し、-t .wav
では "|arecord -d 2"
プログラムを2秒間実行し、arecord
ではヌルファイルに出力し、-n
では統計を取ると指定しています。
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
目的の行に stat
を使用してスペース文字を削除し、 grep
を tr
文字に置き換えて、この例では cut
が得られる 2 番目の部分を取ります。コメントで示唆されているように、RMS は最大振幅よりもエネルギーの測定に適しています。 最後のステップは、手動で起動する必要がないように、initスクリプトやサービスファイルに追加することです (OS / distro に依存します)。