लघु ऑडियो नमूने का विश्लेषण करने के लिए SoXsox
से उपयोग करें :
sox -t .wav "|arecord -d 2" -n stat
साथ -t .wav
हम हम wav प्रकार की प्रक्रिया निर्दिष्ट करते हैं, "|arecord -d 2"
कार्यान्वित arecord
, दो सेकंड के लिए कार्यक्रम -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
इस उदाहरण में देता है । जैसा कि टिप्पणियों द्वारा सुझाया गया है, आरएमएस अधिकतम आयाम की तुलना में ऊर्जा का एक बेहतर उपाय है।
आप अंत bc
में कमांड-लाइन से फ्लोटिंग-पॉइंट मानों की तुलना करने के लिए परिणाम पर उपयोग कर सकते हैं :
if (( $(echo "$value > $threshold" | bc -l) )) ; # ...
यदि आप एक लूप का निर्माण करते हैं ( बैश उदाहरण देखें ) जो 1 मिनट के लिए नींद को बुलाता है , वॉल्यूम का परीक्षण करता है, और फिर दोहराता है, तो आप इसे पृष्ठभूमि में चल रहा छोड़ सकते हैं। अंतिम चरण इसे init स्क्रिप्ट्स या सर्विस फाइल्स (आपके OS / distro के आधार पर) में जोड़ना है, जैसे कि आपको इसे मैन्युअल रूप से लॉन्च करने की भी आवश्यकता नहीं है।