Çocuklarım (4 ve 5) bilgisayarda oyun oynarken çok bağırıyorlar. Bunun için etkili bir çare buldum. Yüksek sesler duyduğumda, oyun bilgisayarına giriyorum ve yapıyorum:
chvt 3; sleep 15; chvt 7
Bu, Linux'ta ekranı 15 saniyeliğine kapatacaktır. Onlara bilgisayarın yüksek seslerden hoşlanmadığını söyledim. Buna tamamen inandılar ve bilgisayardan af dilediler. Çok daha sessiz oldular, ancak benim mutlu olacağım seviyede değiller ve bu yüzden bu eğitim sürecine devam etmem gerekiyor. Ancak, bunu manuel olarak yapmak için her zaman yanlarında olamıyorum.
Bunu otomatikleştirmek mümkün mü? Kutuya bir mikrofon bağlı. Ses yüksekliği seviyesi bir eşiği geçerse, bir komut çalıştırmak istiyorum.
Thomer M. Gil tarafından "How to detect of sound/audio" by Thomer M. Gil adresini kontrol edin.
Temel olarak her 5 saniyede bir sesi kaydeder, daha sonra sox
kullanarak ses genliğini kontrol eder ve bir betiği tetikleyip tetiklemeyeceğine karar verir. Bence ruby
betiğini çocuklarınız için kolayca uyarlayabilirsiniz! Ya da onun sağladığı Python betiğini (PyAudio kullanarak) hacklemeyi de seçebilirsiniz.
Şöyle bir şey yaparak mikrofondan bilgi alabilirsiniz:
arecord -d1 /dev/null -vvv
Ayarlarla biraz oynamanız gerekebilir, örneğin:
arecord -d1 -Dhw:0 -c2 -fS16_LE /dev/null -vvv
Bundan sonrası, çıktıyı ayrıştırmakla ilgili basit bir meseledir.
C veya C++ çözümü için 2 sentim: belki en etkili yaklaşım olmayabilir, ancak Linux'ta ALSA API (Linux'un yerleşik ses işleme kütüphanesi) kullanabilir ve gürültü seviyesini elde etmek için bazı sayısal teknikler (örneğin, her saniye ortalama ses seviyesini hesaplamak) kullanabilirsiniz.
Daha sonra sonsuz bir döngüde kontrol edebilir ve önceden ayarlanmış bir treshold'dan büyükse, ekranı birkaç saniye kapatmak için X11 kütüphanesi kullanabilir veya alternatif olarak (daha az zarif, ancak işe yarıyor) system("chvt 3; sleep 15; chvt 7 ");
kullanarak chvt
komutunu çağırabilirsiniz.