Verwenden sox
von SoX eine kurze Hörprobe zu analysieren:
sox -t .wav "|arecord -d 2" -n stat
Wenn -t .wav
wir spezifizieren, verarbeiten wir den wav-Typ, führen "|arecord -d 2"
das arecord
Programm für zwei Sekunden aus, geben ihn -n
in die Nulldatei aus und stat
geben an, dass wir Statistiken wollen.
Die Ausgabe dieses Befehls auf meinem System mit etwas Hintergrundsprache ist:
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
Die maximale Amplitude kann dann extrahiert werden über:
grep -e "RMS.*amplitude" | tr -d ' ' | cut -d ':' -f 2
Wir grep
für die Zeile, die wir wollen, verwenden tr
, um die Leerzeichen und dann cut
durch das :
Zeichen abzuschneiden, und nehmen den zweiten Teil, der uns 0.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:
if (( $(echo "$value > $threshold" | bc -l) )) ; # ...
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.