Mes enfants (4 et 5 ans) crient beaucoup lorsqu'ils jouent à des jeux sur l'ordinateur. J'ai trouvé un remède efficace à ce problème. Lorsque j'entends des bruits forts, je me connecte à l'ordinateur de jeu et je fais :
chvt 3; sleep 15; chvt 7
Cela éteindra l'écran pendant 15 secondes sous Linux. Je leur ai dit que l'ordinateur n'aime pas les bruits forts. Ils y croient totalement et supplient l'ordinateur de les pardonner. Ils sont devenus beaucoup plus silencieux, mais pas au point de me satisfaire, et je dois donc poursuivre ce processus éducatif. Cependant, je ne suis pas toujours là pour le faire manuellement.
Est-il possible de l'automatiser ? Un microphone est fixé à la boîte. Si le niveau sonore dépasse un certain seuil, je veux lancer une commande.
Vérifiez "Comment détecter la présence de son/audio" par Thomer M. Gil.
En gros, il enregistre le son toutes les 5 secondes, puis vérifie l'amplitude du son, en utilisant sox
, et décide de déclencher ou non un script. Je pense que vous pouvez facilement adapter le script ruby
pour vos enfants ! Ou vous pouvez choisir de travailler sur le script Python (en utilisant PyAudio) qu'il a également fourni.
Vous pouvez obtenir des informations du microphone en faisant quelque chose comme :
arecord -d1 /dev/null -vvv
Vous devrez peut-être jouer un peu avec les paramètres, par exemple :
arecord -d1 -Dhw:0 -c2 -fS16_LE /dev/null -vvv
A partir de là, il suffit d'analyser la sortie.
Mes deux centimes pour la solution C ou C++ : ce n'est peut-être pas l'approche la plus efficace, mais sous Linux, vous pouvez utiliser l'[API ALSA][1] (bibliothèque de gestion audio intégrée à Linux) et utiliser une technique numérique (par exemple, calculer le niveau sonore moyen par seconde) pour obtenir le niveau de bruit.
Vous pouvez ensuite le vérifier dans une boucle infinie, et s'il est supérieur à un seuil prédéfini, vous pouvez utiliser la [bibliothèque X11][2] pour éteindre l'écran pendant quelques secondes, ou alternativement (moins élégant, mais ça marche) invoquer la commande chvt
en utilisant system("chvt 3 ; sleep 15 ; chvt 7 ");
.
[1] : http://en.wikipedia.org/wiki/Advanced_Linux_Sound_Architecture [2] : http://www.x.org/releases/X11R7.5/doc/libX11/libX11.html