सवाल कुछ शोर के स्तर तक पहुंचने पर मैं समय के लिए मशीन "खाली स्क्रीन" कैसे बना सकता हूं (पेनल्टी के रूप में)?


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

chvt 3;  sleep 15;  chvt 7 

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

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


1534
2018-02-01 17:14


मूल


जब तक वे CTRL + ALT + F7 दबाएं नहीं सीखते - Suici Doga
@ सुसीडोगा हे; वे नहीं जानते कि क्या हो रहा है! - wizzwizz4


जवाब:


उपयोग sox से सॉक्स एक लघु ऑडियो नमूना का विश्लेषण करने के लिए:

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 मिनट के लिए, वॉल्यूम का परीक्षण करें, और फिर दोहराना, आप इसे पृष्ठभूमि में चल सकते हैं। अंतिम चरण इसे इनिट स्क्रिप्ट या सेवा फ़ाइलों (आपके ओएस / डिस्ट्रो के आधार पर) में जोड़ना है, जैसे कि आपको इसे मैन्युअल रूप से लॉन्च भी नहीं करना है।


640
2018-02-01 17:36



मैं अधिकतम आयाम लेने का अपमान करता हूं। बच्चों के लिए यह अच्छा नहीं है जब उनकी स्क्रीन खाली हो जाती है क्योंकि किसी ने क्लैप किया या कुछ ऐसा ही किया। औसत अधिक उपयुक्त लगता है। - orlp
सिर्फ एक स्पष्टीकरण, "औसत" से आपका मतलब आरएमएस आयाम सही है? मीन आयाम 0 के करीब होने जा रहा है यदि शोर 2 सेकंड में लगातार जोर से है (सकारात्मक और नकारात्मक हिस्सों एक-दूसरे को रद्द कर देंगे)। - Luke
नमूनों की एक श्रृंखला के लिए एक सरल "ऊर्जा" डिटेक्टर सिर्फ सभी चोटियों के मूल्य को जोड़ना है। यदि आप नहीं चाहते थे तो आपको इसे औसत भी नहीं करना पड़ेगा। एक चोटी सिर्फ किसी भी बिंदु पर है sample[n]>sample[n-1]&&sample[n]>sample[n+1] मैंने इसे एक गीत की ऊर्जा को मापने के लिए एक प्राथमिक तंत्र के रूप में उपयोग किया है और यह काफी अच्छी तरह से काम करता है। बस एक जादू संख्या की खोज करें जिस पर आप वॉल्यूम स्तर से खुश हैं। - Kaslai
संदर्भ के लिए, जब मैं वास्तव में एक बच्चे को चिल्लाता हूं, तो मैं आपके पहले कमांड का एक नमूना आउटपुट देखना चाहता हूं। - Alvin Wong
वर्णित उपयोग के लिए (स्वचालित रूप से + कुछ ही मिनटों में चलना शुरू करें) एक क्रॉन जॉब उपयोग करने का सही टूल है। इनिट स्क्रिप्ट + बैश लूप + नींद का उपयोग करने से सेटअप करने के लिए बहुत आसान और अधिक मजबूत। - m000


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

Kid yell prevention using Pure Data

मेट्रो एक मेट्रोनोम है, और "मेट्रो 100" प्रत्येक 100 एमएस बैंगिंग रखता है।

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

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

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

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


128
2018-02-05 16:20



बहुत अच्छा! आप इस तकनीक का उपयोग करके काफी प्रतिक्रियाशील बना सकते हैं: एक मिनट से अधिक औसत ध्वनि स्तर को ट्रैक करें, फिर बेसलाइन के रूप में इसका उपयोग करें, ताकि जब बच्चे बेसलाइन के ऊपर 20 डीबी से अधिक हो जाएं, तो यह ट्रिगर हो जाता है। फिर यह परिवेश ध्वनि स्तर पर स्वचालित रूप से समायोजित हो जाएगा। - Hans-Christoph Steiner
हां, यह समझ में आता है @ हंस-क्रिस्टोफस्टिनर। लेकिन एक तरह से, परिवेश शोर स्तर वास्तव में बच्चों को जोर से चिल्लाएगा, क्योंकि वे समग्र शोर का एक छोटा सा हिस्सा बनायेंगे? यह निश्चित रूप से तभी लागू होगा जब मौजूदा शोर सफेद या गुलाबी हो या अन्यथा अनदेखा किया जाए। - Janus Troelsen
यदि यह सामान्य से अधिक शांत था, सप्ताहांत की सुबह की तरह, तो यह अधिक संवेदनशील बना देगा, क्योंकि यह हमेशा परिवेश स्तर से 20 डीबी होगा - Hans-Christoph Steiner
यह विस्तारित पीडी है? - nullpotent
@iccthedral: मैंने इसे बनाने के लिए पीडी-विस्तारित किया, लेकिन मुझे नहीं पता कि मैंने किसी भी पीडी-विस्तारित विशिष्ट संरचनाओं का उपयोग किया है या नहीं। - Janus Troelsen


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

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


101
2018-02-01 17:32



उन विस्फोटों के बारे में क्या 5 सेकंड से कम है जो पहचान से बचें? - RhysW


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

arecord -d1 /dev/null -vvv

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

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

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


52
2018-02-01 17:28





यह मैंने देखा है कि एक और मजेदार सवाल है। मैं धन्यवाद करना चाहूँगा 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

43
2018-02-08 14:10



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


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

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


41
2018-02-01 17:32



यदि कमांड का उपयोग करते हैं तो मैं कुछ अलग मानता हूं chvt। ArchWiki अच्छे उदाहरण हैं। - A.D.