ใช้sox
จากSoXเพื่อวิเคราะห์ตัวอย่างเสียงสั้น ๆ :
sox -t .wav "|arecord -d 2" -n stat
ด้วยการที่-t .wav
เราระบุว่าเราประมวลผลชนิด wav "|arecord -d 2"
ดำเนินการarecord
โปรแกรมเป็นเวลาสองวินาที-n
ส่งออกไปยังไฟล์ null และ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 นาทีทดสอบระดับเสียงแล้วเล่นซ้ำคุณสามารถปล่อยให้ลูปทำงานในพื้นหลัง ขั้นตอนสุดท้ายคือการเพิ่มลงในสคริปต์เริ่มต้นหรือไฟล์บริการ (ขึ้นอยู่กับ OS / distro ของคุณ) ดังนั้นคุณไม่จำเป็นต้องเปิดมันด้วยตนเอง