मैं एक ऐसे उपकरण की तलाश में हूं जो मुझे बताएगा, आधे से भी कम समय में, अगर माइक्रोफोन एक निश्चित सीमा से ऊपर किसी भी ध्वनि को उठा रहा है। (मैं तब एमिक्सर की तरह एक और कमांड लाइन टूल के साथ मास्टर चैनल को म्यूट करने की योजना बना रहा हूं।)
मैं एक ऐसे उपकरण की तलाश में हूं जो मुझे बताएगा, आधे से भी कम समय में, अगर माइक्रोफोन एक निश्चित सीमा से ऊपर किसी भी ध्वनि को उठा रहा है। (मैं तब एमिक्सर की तरह एक और कमांड लाइन टूल के साथ मास्टर चैनल को म्यूट करने की योजना बना रहा हूं।)
जवाबों:
यह समाधान डिस्क पर बार-बार लिखने से बच जाएगा, और भले ही यह सबसे खराब स्थिति में वांछित आधे से कम के बजाय एक सेकंड लेता है, मैंने इसे कोशिश करने के बाद तेजी से पर्याप्त पाया। इसलिए, यहाँ दो लिपियों का उपयोग किया गया है:
./detect:
while true; do
arecord -d 1 /dev/shm/tmp_rec.wav ; sox -t .wav /dev/shm/tmp_rec.wav -n stat 2>\
&1 | grep "Maximum amplitude" | cut -d ':' -f 2 | ./check.py
if [ $? -eq 0 ] ; then
amixer set Master 0
else
amixer set Master 80
fi
done
./check.py:
#!/usr/bin/env python
import sys
number = 0.0
thing="NO"
line = sys.stdin.readline()
thing = line.strip()
number = float(thing)
if number < 0.15:
raise Exception,"Below threshold"
शायद ही सुरुचिपूर्ण है, लेकिन यह काम करता है।
नोट: यदि आप एक और क्रमिक चीज़ चाहते हैं, तो कुछ इस तरह से जोड़ें:
for i in `seq 0 80 | tac`; do
amixer set Master $i
done
म्यूटिंग के लिए और
for i in `seq 0 80`; do
amixer set Master $i
done
अनम्यूट करने के लिए।
अजगर स्क्रिप्ट और TALKING_PERIOD के बिना बस संस्करण, यह सेट करता है कि DOWN_SOUND_PERC स्तर पर कितने सेकंड ध्वनि होगी, फिर UP_SOUND_PERC स्तर पर जाता है।
#!/bin/bash
TALKING_PERIOD=16
UP_SOUND_PERC=65
DOWN_SOUND_PERC=45
counter=0
while true; do
echo "counter: " $counter
if [ "$counter" -eq 0 ]; then
nmb=$(arecord -d 1 /dev/shm/tmp_rec.wav ; sox -t .wav /dev/shm/tmp_rec.wav -n stat 2>&1 | grep "Maximum amplitude" | cut -d ':' -f 2)
echo "nmb: " $nmb
if (( $(echo "$nmb > 0.3" |bc -l) )); then
echo "ticho"
amixer -D pulse sset Master 45%
counter=$TALKING_PERIOD
else
echo "hlasno"
amixer -D pulse sset Master 65%
fi
fi
if [[ $counter -gt 0 ]]; then
((counter--))
fi
sleep 1
किया हुआ
एक उपकरण है जिसे pavumeter कहा जाता है जो आपको pavumeter का माइक्रोफोन स्तर, ओपन कैप्चर इंटरफ़ेस देखने देता है।
फिर pavucontrol का उपयोग करके कैप्चर ध्वनि स्तर को समायोजित करें, pavucontrol में, इनपुट डिवाइस पर जाएं, और माइक्रोफ़ोन संवेदनशीलता को समायोजित करें।
संपादित करें: R4v0 द्वारा बैश स्क्रिप्ट में, कोड के अंदर किया गया है।
Edit2: मैं हर बार आवाज़ उठाने के लिए वॉल्यूम बढ़ाना चाहता था, इसलिए मैंने अभी से अधिक संपादित किया और कम से कम होने की बात कर रहा था
if (( $(echo "$nmb < 0.3" |bc -l) )); then
मैंने आसपास के शोर स्तर के अनुसार वॉल्यूम बढ़ाने के लिए बैश स्क्रिप्ट को संशोधित किया।
आप न्यूनतम_वोल्यूम बदल सकते हैं, अधिकतम_वोल्यूम [मूल्य प्रतिशत में है]।
To_Do: वेतन वृद्धि अभी तक नहीं हुई है। sox और bc स्थापित करने की आवश्यकता है।
#!/bin/bash
minimum_volume=20
maximum_volume=60
increment=10
counter=0
while true; do
# echo "counter: " $counter
nmb=$(arecord -d 1 /dev/shm/tmp_rec.wav ; sox -t .wav /dev/shm/tmp_rec.wav -n stat 2>&1 | grep "Maximum amplitude" | cut -d ':' -f 2)
echo "nmb: " $nmb
if (( $(echo "$nmb <= 0.1" |bc -l) )); then
amixer -D pulse sset Master $minimum_volume%
else
if (( $(echo "$nmb <= 0.2" |bc -l) )); then
amixer -D pulse sset Master $(($minimum_volume+ $increment))%
else
if (( $(echo "$nmb <= 0.3" |bc -l) )); then
amixer -D pulse sset Master $(($minimum_volume+ $increment+ $increment))%
else
if (( $(echo "$nmb <= 0.4" |bc -l) & maximum_volume>=40)); then
amixer -D pulse sset Master $(($minimum_volume+ $increment+ $increment+ $increment))%
else
if (( $(echo "$nmb <= 0.5" |bc -l) & maximum_volume>=50)); then
amixer -D pulse sset Master $(($minimum_volume+ $increment+ $increment+ $increment+ $increment))%
else
if (( $(echo "$nmb <= 0.6" |bc -l) & maximum_volume>=60)); then
amixer -D pulse sset Master $(($minimum_volume+ $increment+ $increment+ $increment+ $increment+ $increment))%
else
if (( $(echo "$nmb <= 0.7" |bc -l) & maximum_volume>=70)); then
amixer -D pulse sset Master $(($minimum_volume+ $increment+ $increment+ $increment+ $increment+ $increment+ $increment))%
else
if (( $(echo "$nmb <= 0.8" |bc -l) & maximum_volume>=80)); then
amixer -D pulse sset Master $(($minimum_volume+ $increment+ $increment+ $increment+ $increment+ $increment+ $increment+ $increment))%
else
if (( $(echo "$nmb <= 0.9" |bc -l) & maximum_volume>=90)); then
amixer -D pulse sset Master $(($minimum_volume+ $increment+ $increment+ $increment+ $increment+ $increment+ $increment+ $increment+ $increment))%
else
amixer -D pulse sset Master $(($maximum_volume+ $minimum_volume))%
fi
fi
fi
fi
fi
fi
fi
fi
fi
sleep 1
done
while true; do amixer set Master $(rec -n stat trim 0 .5 2>&1 | awk '/^Maximum amplitude/ { print $3 < .15 ? 80 : 0 }'); done