Meine Kinder (4 und 5) schreien viel, wenn sie am Computer spielen. Ich habe ein wirksames Heilmittel dafür gefunden. Wenn ich laute Geräusche höre, schaue ich in den Spielcomputer und mache:
chvt 3; sleep 15; chvt 7
Dadurch wird der Bildschirm unter Linux für 15 Sekunden ausgeschaltet. Ich habe ihnen gesagt, dass der Computer keine lauten Geräusche mag. Sie glauben das völlig und bitten den Computer um Vergebung. Sie wurden viel leiser, aber nicht auf dem Niveau, über das ich mich freuen würde, und deshalb muss ich diesen Bildungsprozess fortsetzen. Ich bin jedoch nicht immer da, um dies manuell zu tun.
Ist es möglich, dies zu automatisieren? Ein Mikrofon ist an der Box angebracht. Wenn der Lautstärkepegel eine Schwelle überschreitet, möchte ich einen Befehl ausführen.
quelle
Antworten:
Verwenden
sox
von SoX eine kurze Hörprobe zu analysieren:Wenn
-t .wav
wir spezifizieren, verarbeiten wir den wav-Typ, führen"|arecord -d 2"
dasarecord
Programm für zwei Sekunden aus, geben ihn-n
in die Nulldatei aus undstat
geben an, dass wir Statistiken wollen.Die Ausgabe dieses Befehls auf meinem System mit etwas Hintergrundsprache ist:
Die maximale Amplitude kann dann extrahiert werden über:
Wir
grep
für die Zeile, die wir wollen, verwendentr
, um die Leerzeichen und danncut
durch das:
Zeichen abzuschneiden, und nehmen den zweiten Teil, der uns0.068383
in diesem Beispiel gibt. Wie aus den Kommentaren hervorgeht, ist der Effektivwert ein besseres Maß für die Energie als die maximale Amplitude.Sie können
bc
das Ergebnis schließlich zum Vergleichen von Gleitkommawerten über die Befehlszeile verwenden:Wenn Sie eine Schleife erstellen (siehe Bash-Beispiele ), die Sleep für 1 Minute aufruft , die Lautstärke testet und dann wiederholt, können Sie sie im Hintergrund laufen lassen. Der letzte Schritt ist das Hinzufügen zu den Init-Skripten oder Servicedateien (abhängig von Ihrem Betriebssystem / Ihrer Distribution), sodass Sie sie nicht einmal manuell starten müssen.
quelle
sample[n]>sample[n-1]&&sample[n]>sample[n+1]
ich ihn als rudimentären Mechanismus zum Messen der Energie eines Songs verwendet habe und der recht gut funktioniert. Suchen Sie einfach nach einer magischen Zahl, bei der Sie mit der Lautstärke zufrieden sind.Mit Pure Data geht das so :
Metro ist ein Metronom und "Metro 100" schlägt alle 100 ms.
Der Ton kommt von adc ~, die Lautstärke wird von env ~ berechnet. "pd dsp 0" schaltet den DSP aus, wenn er angeschlagen ist, "pd dsp 1" schaltet ihn ein. "shell" führt den übergebenen Befehl in einer Shell aus. Ich verwende die Linux-xrandr-API, um die Helligkeit auf X zu setzen. Sie müssen dies für Wayland anpassen.
Wie Sie sehen können, beansprucht die Nachfrist und das Sperren viel mehr Platz als der Audio-Code.
Eine Lösung mit Ringpuffern und / oder gleitenden Durchschnitten zu erstellen, sollte viel einfacher sein als dies zu tun
sox
. Daher halte ich es nicht für eine schlechte Idee, Pure Data dafür zu verwenden. Die Bildschirmausblendung selbst und die Sperrung passen jedoch nicht zum Datenfluss-Paradigma.Die PD-Datei finden Sie unter gist.github.com: ysangkok - kidsyell.pd .
quelle
Überprüfen Sie "Erkennen von Ton / Audio" von Thomer M. Gil .
Grundsätzlich zeichnet es den Ton alle 5 Sekunden auf, prüft dann anhand der Tonamplitude
sox
und entscheidet, ob ein Skript ausgelöst wird oder nicht. Ich denke , man kann leicht die Anpassungruby
Skript für Ihre Kinder! Sie können auch das von ihm bereitgestellte Python-Skript (mit PyAudio) hacken.quelle
Sie können Informationen vom Mikrofon abrufen, indem Sie folgende Aktionen ausführen:
Möglicherweise müssen Sie ein wenig mit den Einstellungen spielen, z. B .:
Von da an ist es einfach, die Ausgabe zu analysieren.
quelle
Dies ist eine der spaßigeren Fragen, die ich gesehen habe. Ich möchte mich bei tucuxi für eine so gute antwort bedanken ; das habe ich als bash script gesetzt
quelle
Meine 2 Cent für die C- oder C ++ - Lösung: Vielleicht nicht der effektivste Ansatz, aber unter Linux können Sie die ALSA-API (integrierte Audiobearbeitungsbibliothek von Linux) verwenden und einige numerische Techniken anwenden (zum Beispiel die Berechnung des durchschnittlichen Klangs) Pegel jede Sekunde), um den Geräuschpegel zu erhalten.
Dann können Sie es in einer Endlosschleife überprüfen und, wenn es größer als ein voreingestellter Schwellenwert ist, können Sie die X11-Bibliothek verwenden , um den Bildschirm für einige Sekunden auszuschalten, oder alternativ (weniger elegant, aber es funktioniert) den
chvt
Befehl mit aufrufensystem("chvt 3; sleep 15; chvt 7 ");
.quelle
chvt
. ArchWiki hat schöne Beispiele.