Bash

監控麥克風並保存過濾片段

  • January 16, 2018

我使用以下腳本來監控我的麥克風:

while true; do
   printf "$(AUDIODEV=hw:2,0 rec -n stat trim 0 1 2>&1 |
       awk 'BEGIN { ORS="" } /^Maximum amplitude/ { print "Max. amplitude: "$3} 
            /^Rough\s+frequency/ { print " Frequency: "$3} 
            /^Maximum\s+delta/ { print " Max. delta: "$3}')\r";
done

它記錄一個 1 秒長的段,從標準輸出中提取值Maximum amplitude並列印出來。Rough frequency``sox

如果片段的數量或頻率大於特定門檻值,我可以將片段保存到文件嗎?我知道我可以保存每個段然後分析它,但是寫操作會太多,我想避免。

與此同時,我找到了解決方案。它基於管道輸出rectobase64以便可以將其編碼為 ASCII 並儲存在 bash 變數中。如果是時候分析片段的音量和頻率,我會base --decode在可變內容上執行。在下面的腳本中,僅分析卷。如果超過門檻值(0.6)handleExcess,則呼叫該段並保存該段。我還將片段長度增加到 5 秒。

handleExcess() {
   echo "$1" | base64 --decode > /tmp/"$2".wav
}

VOLUME="";

while true; do
   AUDIO_DATA="$(AUDIODEV=hw:0,0 rec -c 1 -t wav - trim 0 5 2> /dev/null | base64)";
   declare $(echo "$AUDIO_DATA" | base64 --decode | sox - -n stat 2>&1 | awk 'BEGIN { ORS="" } /^Maximum amplitude/ { print "VOLUME="$3 }');

   if [ $(echo "$VOLUME > 0.6" | bc) == 1 ]; then
       AUDIO_DATA_TMP="$AUDIO_DATA";
       handleExcess "$AUDIO_DATA_TMP" "$VOLUME""_""$(date +%s)" &
   fi
done

引用自:https://unix.stackexchange.com/questions/416994