যদি কিছু শব্দ মাত্রা পৌঁছে যায় তবে আমি কীভাবে একটি যন্ত্রটিকে একটি সময়ের জন্য (ফাঁকা পর্দা) তৈরি করব?


1548

আমার বাচ্চারা (4 এবং 5) কম্পিউটারে গেম খেলে প্রচুর চিৎকার করে। আমি এটির জন্য একটি কার্যকর নিরাময়ের সন্ধান পেয়েছি। আমি যখন উচ্চ শব্দ শুনতে পাই, তখন আমি গেম কম্পিউটারে প্রবেশ করি এবং করি:

chvt 3;  sleep 15;  chvt 7 

এটি লিনাক্সে 15 সেকেন্ডের জন্য স্ক্রিনটি বন্ধ করবে। আমি তাদের বলেছি যে কম্পিউটার উচ্চ শব্দ শুনতে পছন্দ করে না। তারা এটিকে পুরোপুরি বিশ্বাস করে এবং কম্পিউটারের কাছে ক্ষমা প্রার্থনা করে। তারা অনেক বেশি শান্ত হয়েছিল, তবে আমি যে স্তরে খুশি হব তা নয়, এবং তাই এই শিক্ষামূলক প্রক্রিয়াটি চালিয়ে যাওয়া দরকার। যাইহোক, আমি নিজেই এটি করার জন্য প্রায়শই নই।

এটি কি স্বয়ংক্রিয়ভাবে চালানো সম্ভব? একটি মাইক্রোফোন বাক্সের সাথে সংযুক্ত করা হয়েছে। যদি উচ্চতার স্তরটি কিছুদিকের দ্বার পার হয়ে যায় তবে আমি একটি কমান্ড চালাতে চাই।


2
যতক্ষণ না তারা সিটিআরএল +
এএলটি

1
নিবন্ধন করুন তারা জানে না কী হচ্ছে!
wizzwizz4

প্রযুক্তিগত সমাধানের জন্য অভিনন্দন। তবে আমি মনে করি, বাচ্চাদের কাছে সর্বদা সত্য বলা গুরুত্বপূর্ণ।
পিটার

উত্তর:


645

একটি সংক্ষিপ্ত অডিও নমুনা বিশ্লেষণ করতে SoXsox থেকে ব্যবহার করুন :

sox -t .wav "|arecord -d 2" -n stat

সঙ্গে -t .wavআমরা WAV টাইপ প্রক্রিয়া নির্দিষ্ট "|arecord -d 2"executes 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 স্ক্রিপ্ট বা পরিষেবা ফাইলগুলিতে যুক্ত করা (আপনার ওএস / ডিস্ট্রোর উপর নির্ভর করে) যেমন আপনাকে নিজে নিজে এটি চালু করতে হবে না।


280
আমি সর্বোচ্চ প্রশস্ততা নেওয়ার সিদ্ধান্ত নেব না taking বাচ্চাদের যখন তাদের স্ক্রিন ফাঁকা হয়ে যায় কেবল তখন কেউ তালি বা অন্য জাতীয় কিছু দেয় It's গড় আরও উপযুক্ত বলে মনে হচ্ছে seems
orlp

34
কেবলমাত্র একটি গড় ব্যাখ্যা, "গড়" দ্বারা আপনার মানে আরএমএস প্রশস্ততা ঠিক? যদি শব্দটি 2 সেকেন্ডের মধ্যে ধারাবাহিকভাবে উচ্চস্বরে হয় (ধনাত্মক এবং নেতিবাচক অংশগুলি একে অপরকে বাতিল করে দেবে) তবে গড় প্রশস্ততা 0 এর কাছাকাছি চলে যাবে।
লুক

6
একটি ধারাবাহিক নমুনার জন্য একটি সাধারণ "শক্তি" সনাক্তকারী হ'ল কেবল সমস্ত শিখার মান এক সাথে যুক্ত করা। আপনি না চাইলে আপনার এটি গড় করতে হবে না। শীর্ষস্থানটি এমন কোনও বিন্দু যেখানে sample[n]>sample[n-1]&&sample[n]>sample[n+1]আমি এটি একটি গানের শক্তি পরিমাপের জন্য প্রাথমিক পদ্ধতি হিসাবে ব্যবহার করেছি এবং এটি বেশ ভালভাবে কাজ করে। খালি ভলিউম স্তরটি নিয়ে আপনি খুশি এমন একটি যাদু নম্বর অনুসন্ধান করুন।
কসলাই

3
আমি আপনার প্রথম কমান্ডের একটি নমুনা আউটপুট দেখতে চাই যখন রেফারেন্সের জন্য এটি সত্যিই কোনও বাচ্চা চিৎকার করতে আসে।
অ্যালভিন ওয়াং

3
বর্ণিত ব্যবহারের জন্য (প্রতি কয়েক মিনিটে স্বয়ংক্রিয়ভাবে + চালান) ক্রোন জব হ'ল সঠিক উপায় tool আরআইপি স্ক্রিপ্ট + ব্যাশ লুপ + স্লিপ ব্যবহারের চেয়ে সেটআপ করা অনেক সহজ।
এম 1000

130

খাঁটি ডেটা দিয়ে এটি কীভাবে করা যায় তা এখানে :

খাঁটি ডেটা ব্যবহার করে কিড চিৎকার প্রতিরোধ

মেট্রো একটি মেট্রোণোম এবং "মেট্রো 100" প্রতি 100 এমএস বেজে যায়।

অডিওটি adc from থেকে আসছে, ভলিউম env by দ্বারা গণনা করা হচ্ছে ~ "পিডি ডিএসপি 0" নিষিদ্ধ হওয়ার পরে ডিএসপি বন্ধ করে দেয়, "পিডি ডিএসপি 1" এটি চালু করে। "শেল" শেলটিতে পাস হওয়া কমান্ডটি কার্যকর করে, আমি এক্সকে উজ্জ্বলতা সেট করতে লিনাক্স এক্সরেন্ডার এপিআই ব্যবহার করি, আপনাকে ওয়েল্যান্ডের জন্য এটি খাপ খাইয়ে নিতে হবে।

আপনি দেখতে পাচ্ছেন, গ্রেস পিরিয়ড এবং লকিং অডিও কোডের চেয়ে বেশি জায়গা নেয়।

রিং বাফার এবং / অথবা মুভিং এভারেজ এর ক্ষেত্রে একটি সমাধান মেকিং পথ সঙ্গে এরকম তুলনায় অনেক সহজ হওয়া উচিত sox। সুতরাং আমি মনে করি না এটির জন্য খাঁটি ডেটা ব্যবহার করা খারাপ ধারণা। তবে পর্দাটি নিজেই ফাঁকা হয়ে যায় এবং লকিং ডেটাফ্লো দৃষ্টান্তের সাথে খাপ খায় না।

পিডি ফাইলটি gist.github.comরয়েছে: ysangkok - Kidsyell.pd


11
খুব সুন্দর! আপনি এই কৌশলটি ব্যবহার করে এটি বেশ প্রতিক্রিয়াশীল করে তুলতে পারেন: এক মিনিটের মধ্যে গড় শব্দের স্তর ট্র্যাক করুন, তারপরে বেসলাইন হিসাবে এটি ব্যবহার করুন, যাতে বাচ্চারা যখন বেসলাইন থেকে 20 ডিবি উপরে যায়, তখন এটি ট্রিগার হয়ে যায়। তারপরে এটি স্বয়ংক্রিয়ভাবে পরিবেষ্টনের শব্দ স্তরের সাথে সামঞ্জস্য হবে।
হ্যান্স-ক্রিস্টোফ স্টেইনার

1
হ্যাঁ, এটি @ হান্স-ক্রিস্টোফস্টাইনার অর্থবোধ করে। তবে একটি উপায়ে, পরিবেষ্টনের শব্দদ্বারটি কি বাচ্চাদের আরও জোরে চিৎকার করার প্রয়োজন পড়বে না, যেহেতু তারা সামগ্রিক গোলমালের একটি ছোট অনুপাত তৈরি করবে? অবশ্যই এটি তখনই প্রযোজ্য যদি বিদ্যমান শব্দটি সাদা বা গোলাপী বা অন্যথায় উপেক্ষা করা হয়।
জানুস ট্রোলসন

4
এটি যদি উইকএন্ডের সকালের মতো স্বাভাবিকের চেয়ে শান্ত ছিল, তবে এটি আরও সংবেদনশীল করে তুলবে, যেহেতু এটি সর্বদা পরিবেষ্টনের স্তর থেকে 20 ডিবি হতে হবে
হান্স-ক্রিস্টোফ স্টেইনার

এই কি বর্ধিত পিডি?
নালপোটেন্ট

@ আইকিডেড্রাল: আমি এটি তৈরি করতে পিডি-এক্সটেন্ডড ব্যবহার করেছি, তবে আমি জানি না যে আমি কোনও পিডি-এক্সটেন্ডেড নির্দিষ্ট কন্সট্রাক্টস ব্যবহার করেছি কিনা।
জানুস ট্রয়লসেন

102

পরীক্ষা করে দেখুন Thomer এম Gil দ্বারা "কিভাবে শব্দ / অডিও উপস্থিতি সনাক্ত করতে"

মূলত এটি প্রতি 5 সেকেন্ডে শব্দটি রেকর্ড করে, শব্দ প্রশস্ততার চেয়ে বেশি পরীক্ষা করে sox, ব্যবহার করে এবং সিদ্ধান্ত নেয় যে কোনও স্ক্রিপ্ট ট্রিগার করে কিনা। আমি মনে করি আপনি সহজেই rubyআপনার বাচ্চাদের জন্য স্ক্রিপ্টটি মানিয়ে নিতে পারবেন ! অথবা আপনি পাইথন স্ক্রিপ্টটি হস্তান্তর করতে বেছে নিতে পারেন (পাইউডিও ব্যবহার করে) তিনিও সরবরাহ করেছেন।


5
এই সন্ধানগুলি এড়ানো 5 সেকেন্ডেরও কম সংঘর্ষগুলির সম্পর্কে কী?
RhysW

53

আপনি মাইক্রোফোন থেকে এমন কিছু করে তথ্য পেতে পারেন:

arecord -d1 /dev/null -vvv

আপনাকে কিছুটা সেটিংস দিয়ে খেলতে হতে পারে যেমন:

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

সেখান থেকে আউটপুট পার্স করার বিষয়টি সাধারণ বিষয়।


43

এটি আমি দেখেছি আরও মজাদার প্রশ্নগুলির মধ্যে একটি। আমি এইরকম সূক্ষ্ম উত্তরের জন্য টুকুসিকে ধন্যবাদ জানাতে চাই ; যা আমি বাশ স্ক্রিপ্ট হিসাবে সেট করেছি

#!/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 দিয়ে শেষ করুন), এবং যদি আপনার কীবোর্ডটি টার্মিনালটি খোলার জন্য খুব জোরে থাকে তবে সুডো কিলালটি খুব জোরে চালাতে হবে তবে Ctrl + Alt + F1 লিখে সেখানে লগ ইন করুন))
আলেক্সেক্স রোচে

41

সি বা সি ++ সমাধানের জন্য আমার 2 সেন্ট: সম্ভবত সবচেয়ে কার্যকর পন্থা নয়, তবে লিনাক্স -এ আপনি ALSA API (লিনাক্সের বিল্ট-ইন অডিও হ্যান্ডলিং লাইব্রেরি) ব্যবহার করতে পারেন এবং কিছু সংখ্যক কৌশল ব্যবহার করতে পারেন (উদাহরণস্বরূপ, গড় শব্দের গণনা করা শোনার স্তরটি অর্জন করতে) প্রতিটি সেকেন্ডে স্তর করুন)।

তারপরে আপনি এটি একটি অসীম লুপে পরীক্ষা করতে পারেন এবং এটি প্রিসেট ট্রেসোল্ডের চেয়ে বড় হলে আপনি X11 লাইব্রেরিটি কয়েক সেকেন্ডের জন্য স্ক্রিনটি বন্ধ করতে ব্যবহার করতে পারেন , বা বিকল্পভাবে (কম মার্জিত, তবে এটি কাজ করে) chvtকমান্ডটি ব্যবহার করে অনুরোধ করতে পারেন system("chvt 3; sleep 15; chvt 7 ");


2
কমান্ড ব্যবহার করা হলে আমি অন্য কিছু বিবেচনা করব chvtআর্কউইকের চমৎকার উদাহরণ রয়েছে।
এডি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.