Verwenden soxvon SoX eine kurze Hörprobe zu analysieren:
sox -t .wav "|arecord -d 2" -n stat
Wenn -t .wavwir spezifizieren, verarbeiten wir den wav-Typ, führen "|arecord -d 2"das arecord Programm für zwei Sekunden aus, geben ihn -nin die Nulldatei aus und statgeben 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 grepfür die Zeile, die wir wollen, verwenden tr, um die Leerzeichen und dann cutdurch das :Zeichen abzuschneiden, und nehmen den zweiten Teil, der uns 0.068383in 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 bcdas 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.