Meine Kinder (4 und 5) schreien viel, wenn sie Spiele am Computer spielen. Ich habe ein wirksames Mittel dagegen gefunden. Wenn ich laute Geräusche höre, logge ich mich in den Spielcomputer ein und mache:
chvt 3; sleep 15; chvt 7
Damit wird der Bildschirm unter Linux für 15 Sekunden ausgeschaltet. Ich habe ihnen gesagt, dass der Computer laute Geräusche nicht mag. Sie glauben das und flehen den Computer um Verzeihung an. Sie sind viel leiser geworden, aber nicht so, dass ich zufrieden wäre, und so muss ich diesen Erziehungsprozess fortsetzen. Allerdings bin ich nicht immer da, um dies manuell zu tun.
Ist es möglich, dies zu automatisieren? An der Box ist ein Mikrofon angebracht. Wenn der Lautstärkepegel eine bestimmte Schwelle überschreitet, möchte ich einen Befehl ausführen.
Siehe "How to detect the presence of sound/audio" von Thomer M. Gil.
Grundsätzlich nimmt es den Ton alle 5 Sekunden auf, prüft dann mit sox
die Tonamplitude und entscheidet, ob ein Skript ausgelöst wird oder nicht. Ich denke, Sie können das ruby
-Skript leicht für Ihre Kinder anpassen! Oder Sie können das Python-Skript (mit PyAudio), das er ebenfalls zur Verfügung gestellt hat, weiter bearbeiten.
Sie können Informationen vom Mikrofon abrufen, indem Sie etwas wie folgt tun:
arecord -d1 /dev/null -vvv
Möglicherweise müssen Sie ein wenig mit den Einstellungen spielen, wie z. B.:
arecord -d1 -Dhw:0 -c2 -fS16_LE /dev/null -vvv
Von da an ist es eine einfache Angelegenheit, die Ausgabe zu analysieren.
Meine 2 Cents für die C- oder C++-Lösung: Vielleicht ist das nicht der effektivste Ansatz, aber unter Linux können Sie die ALSA API (eingebaute Audiobearbeitungsbibliothek von Linux) verwenden und eine numerische Technik (z. B. die Berechnung des durchschnittlichen Schallpegels pro Sekunde) einsetzen, um den Geräuschpegel zu ermitteln.
Dann können Sie ihn in einer Endlosschleife überprüfen, und wenn er größer ist als ein voreingestellter Schwellenwert, können Sie die X11-Bibliothek verwenden, um den Bildschirm für einige Sekunden abzuschalten, oder alternativ (weniger elegant, aber es funktioniert) den Befehl chvt
mit system("chvt 3; sleep 15; chvt 7 ");
aufrufen.