Gunakan soxdari SoX untuk menganalisis sampel audio pendek:
sox -t .wav "|arecord -d 2" -n stat
Dengan -t .wavkami tentukan, kami memproses jenis wav, "|arecord -d 2"menjalankan arecord program selama dua detik, -nmengeluarkan ke file nol dan dengan statkami menentukan kami ingin statistik.
Output dari perintah ini, pada sistem saya dengan beberapa pidato latar belakang, adalah:
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
Amplitudo maksimum kemudian dapat diekstraksi melalui:
grep -e "RMS.*amplitude" | tr -d ' ' | cut -d ':' -f 2
Kami grepuntuk baris yang kami inginkan, gunakan truntuk memangkas karakter spasi dan kemudian cutoleh :karakter dan mengambil bagian kedua yang memberi kita 0.068383dalam contoh ini. Seperti yang disarankan oleh komentar, RMS adalah ukuran energi yang lebih baik daripada amplitudo maksimum.
Anda akhirnya dapat menggunakan bcpada hasil untuk membandingkan nilai floating-point dari baris perintah:
if (( $(echo "$value > $threshold" | bc -l) )) ; # ...
Jika Anda membuat lingkaran (lihat contoh Bash ) yang memanggil sleep selama 1 menit, menguji volume, dan kemudian mengulanginya, Anda bisa membiarkannya tetap berjalan di latar belakang. Langkah terakhir adalah menambahkannya ke skrip init atau file layanan (tergantung pada OS / distro Anda), sehingga Anda bahkan tidak harus menjalankannya secara manual.