यदि कुछ निश्चित स्तर तक पहुँच जाते हैं तो मैं समय की अवधि के लिए एक मशीन "रिक्त स्क्रीन" कैसे बना सकता हूँ?


1548

मेरे बच्चे (4 और 5) कंप्यूटर पर गेम खेलते समय बहुत चिल्लाते हैं। मुझे इसके लिए एक प्रभावी इलाज मिला। जब मैं जोर से शोर सुनता हूं, तो मैं गेम कंप्यूटर में ssh करता हूं और करता हूं:

chvt 3;  sleep 15;  chvt 7 

यह लिनक्स पर 15 सेकंड के लिए स्क्रीन को बंद कर देगा। मैंने उन्हें बताया है कि कंप्यूटर को जोर से शोर पसंद नहीं है। वे इसे पूरी तरह से मानते हैं और माफी के लिए कंप्यूटर से भीख मांगते हैं। वे बहुत शांत हो गए, लेकिन इस स्तर तक नहीं कि मैं खुश रहूंगा, और इसलिए मुझे इस शैक्षिक प्रक्रिया को जारी रखने की आवश्यकता है। हालाँकि, मैं मैन्युअल रूप से ऐसा करने के लिए हमेशा नहीं हूँ।

क्या इसे स्वचालित करना संभव है? एक माइक्रोफोन बॉक्स से जुड़ा हुआ है। यदि जोर का स्तर कुछ सीमा से गुजरता है तो मैं एक कमांड चलाना चाहता हूं।


2
जब तक वे CTRL + ALT + F7
Suici Doga

1
@ शुचिदोगा हे; वे नहीं जानते कि क्या चल रहा है!
wizzwizz4

तकनीकी समाधान के लिए बधाई। लेकिन मुझे लगता है, बच्चों को हमेशा सच कहना जरूरी है।
पीहर

जवाबों:


645

लघु ऑडियो नमूने का विश्लेषण करने के लिए 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 के आधार पर) में जोड़ना है, जैसे कि आपको इसे मैन्युअल रूप से लॉन्च करने की भी आवश्यकता नहीं है।


280
मैं अधिक से अधिक आयाम लेने पर ध्यान नहीं दूंगा। यह बच्चों के लिए अच्छा नहीं है जब उनकी स्क्रीन खाली हो जाती है क्योंकि किसी ने ताली बजाई या कुछ इसी तरह की। औसत अधिक उपयुक्त लगता है।
orlp

34
बस एक स्पष्टीकरण, "औसत" से आपका मतलब आरएमएस एम्प्लीट्यूड सही है? मीन एम्प्लिट्यूड 0 के करीब होने जा रहा है यदि शोर 2 सेकंड से अधिक लगातार जोर का है (सकारात्मक और नकारात्मक आधा एक दूसरे को रद्द कर देगा)।
ल्यूक

6
नमूनों की एक श्रृंखला के लिए एक सरल "ऊर्जा" डिटेक्टर सिर्फ सभी चोटियों के मूल्य को एक साथ जोड़ना है। यदि आप नहीं चाहते तो आपको इसे औसत भी नहीं करना पड़ेगा। एक शिखर सिर्फ एक बिंदु है जहां sample[n]>sample[n-1]&&sample[n]>sample[n+1]मैंने इसे एक गीत की ऊर्जा को मापने के लिए एक अल्पविकसित तंत्र के रूप में उपयोग किया है और यह काफी अच्छी तरह से काम करता है। बस एक जादुई संख्या खोजें, जिस पर आप वॉल्यूम स्तर से खुश हैं।
कसलाई

3
मैं आपके पहले कमांड का एक नमूना आउटपुट देखना चाहूंगा जब यह वास्तव में संदर्भ के लिए एक बच्चे को चिल्लाता है।
एल्विन वोंग

3
वर्णित उपयोग के लिए (स्वचालित रूप से हर कुछ मिनट में शुरू करें) क्रोन जॉब उपयोग करने के लिए सही उपकरण है। बहुत आसान सेटअप करने के लिए और init स्क्रिप्ट + बैश लूप + नींद का उपयोग करने से अधिक मजबूत।
m000

130

यहां बताया गया है कि यह शुद्ध डेटा के साथ कैसे किया जा सकता है :

शुद्ध डेटा का उपयोग करके बच्चे की रोकथाम

मेट्रो एक मेट्रोनोम है, और "मेट्रो 100" प्रत्येक 100 एमएस को पीटता रहता है।

ऑडियो adc ~ से आ रहा है, वॉल्यूम की गणना env ~ से की जाती है। "पीडी डीएसपी 0" डीएसपी को बंद कर देता है जब धमाका होता है, "पीडी डीएसपी 1" इसे चालू करता है। "शेल" एक शेल में पारित कमांड को निष्पादित करता है, मैं एक्स को चमक सेट करने के लिए लिनक्स xrandr एपीआई का उपयोग करता हूं, आपको इसे वेलैंड के लिए अनुकूलित करने की आवश्यकता है।

जैसा कि आप देख सकते हैं, अनुग्रह अवधि और लॉकिंग ऑडियो कोड की तुलना में अधिक स्थान लेता है।

रिंग बफ़र्स और / या मूविंग एवरेज के साथ एक समाधान बनाना, इसे करने की तुलना में आसान होना चाहिए sox। इसलिए मुझे नहीं लगता कि इसके लिए शुद्ध डेटा का उपयोग करना एक बुरा विचार है। लेकिन स्क्रीन खुद को खाली करता है और लॉकिंग डेटाफ़्लो प्रतिमान के साथ फिट नहीं होता है।

पीडी फाइल gist.github.com पर है: ysangkok - Kidsyell.pd


11
बहुत अच्छा! आप इस तकनीक का उपयोग करके इसे काफी संवेदनशील बना सकते हैं: एक मिनट में औसत ध्वनि स्तर को ट्रैक करें, फिर बेसलाइन के रूप में इसका उपयोग करें, ताकि जब बच्चे बेसलाइन से 20 डीबी से अधिक हो जाएं, तो यह ट्रिगर हो जाए। फिर यह स्वचालित रूप से परिवेशी ध्वनि स्तर पर समायोजित हो जाएगा।
हंस-क्रिस्टोफ़ स्टीनर

1
हाँ, यह समझ में आता है @ हंस-क्रिस्टोफ़सेटरिन। लेकिन एक तरह से, परिवेशी शोर स्तर वास्तव में बच्चों को जोर से चिल्लाने की आवश्यकता नहीं होगी, क्योंकि वे समग्र शोर का एक छोटा अनुपात बना लेंगे? यह तभी लागू होगा जब मौजूदा शोर श्वेत या गुलाबी हो या अन्यथा अनदेखा हो।
Janus Troelsen

4
अगर यह एक सप्ताहांत सुबह की तरह सामान्य से अधिक शांत था, तो यह इसे और अधिक संवेदनशील बना देगा, क्योंकि यह हमेशा परिवेश स्तर से 20 डीबी ऊपर होगा
हंस-क्रिस्टोफ स्टेनर

यह विस्तारित पीडी है?
nullpotent

@iccthedral: मैंने इसे बनाने के लिए pd-Extended का उपयोग किया था, लेकिन मुझे नहीं पता कि मैंने किसी pd- विस्तारित विशिष्ट निर्माण का उपयोग किया है या नहीं।
Janus Troelsen

102

थॉमर एम। गिल द्वारा "ध्वनि / ऑडियो की उपस्थिति का पता लगाने के लिए कैसे" की जाँच करें

मूल रूप से यह प्रत्येक 5 सेकंड में ध्वनि को रिकॉर्ड करता है, ध्वनि आयाम के लिए जांच की तुलना में sox, स्क्रिप्ट का उपयोग करते हुए या नहीं तय करता है। मुझे लगता है कि आप rubyअपने बच्चों के लिए स्क्रिप्ट को आसानी से अपना सकते हैं! या आप पायथन स्क्रिप्ट (PyAudio का उपयोग करके) को हैक करना चुन सकते हैं जो उसने प्रदान की है।


5
5 सेकंड से कम के उन प्रकोपों ​​के बारे में क्या पता लगाने से बचें?
RhysW

53

आप कुछ ऐसा करके माइक्रोफोन से जानकारी प्राप्त कर सकते हैं:

arecord -d1 /dev/null -vvv

आपको सेटिंग्स के साथ थोड़ा खेलना पड़ सकता है, जैसे:

arecord -d1 -Dhw:0 -c2 -fS16_LE /dev/null -vvv

वहाँ से, यह आउटपुट पार्स करने का एक सरल मामला है।


43

यह एक और मजेदार सवाल है जो मैंने देखा है। मैं इस तरह के एक ठीक जवाब के लिए tucuxi धन्यवाद देना चाहूंगा ; कि मैंने एक बैश स्क्रिप्ट के रूप में सेट किया है

#!/bin/bash

threshold=0.001
# we should check that sox and arecord are installed
if [ $1 ]; then threshold=$1; fi
while [ 1 -gt 0 ]; do
 if(( $(echo "$(sox -t .wav '|arecord -d 2' -n stat 2>&1|grep -e 'RMS.*amplitude'|tr -d ' '|cut -d ':' -f 2 ) > $threshold"|bc -l) ))
 then
  chvt 3; sleep 5; chvt 7;
 fi
done

7
यदि आप /etc/rc4.d/S99rc.local पर एक पंक्ति जोड़कर इसे चलाना शुरू करते हैं और फिर इनपुट माइक को अनलिमिफ़ाइड से 100% तक बदल देते हैं तो आप अंत में tty3 पर फेंके जा सकते हैं (आप सोने से पहले वापस कूद सकते हैं) Ctrl + Alt + F7) के साथ, और यदि आपका कीबोर्ड टर्मिनल खोलने के लिए बहुत तेज़ है, sudo किलॉल को भी चलाने के लिए_loud तो Ctrl + Alt + F1 और वहां लॉग इन करें।)
Alexx Roche

41

सी या सी ++ समाधान के लिए मेरे 2 सेंट: शायद सबसे प्रभावी दृष्टिकोण नहीं है, लेकिन लिनक्स पर, आप एएलएसए एपीआई (लिनक्स के अंतर्निहित ऑडियो हैंडलिंग लाइब्रेरी) का उपयोग कर सकते हैं और कुछ संख्यात्मक तकनीक का उपयोग कर सकते हैं (उदाहरण के लिए, औसत ध्वनि की गणना प्रत्येक स्तर) शोर के स्तर को प्राप्त करने के लिए।

फिर आप इसे अनंत लूप में जांच सकते हैं, और यदि यह एक पूर्व निर्धारित त्रिशूल से अधिक है, तो आप कुछ सेकंड के लिए स्क्रीन को बंद करने के लिए X11 लाइब्रेरी का उपयोग कर सकते हैं , या वैकल्पिक रूप से (कम सुरुचिपूर्ण, लेकिन यह काम करता है) chvtकमांड का उपयोग करके आह्वान करते हैं system("chvt 3; sleep 15; chvt 7 ");


2
अगर कमांड का उपयोग करते हुए मैं कुछ अलग मानूंगा chvtArchWiki के अच्छे उदाहरण हैं।
AD
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.