在 Linux 中使用命令行工具监控麦克风电平

Chr*_*dal 19 audio linux microphone software-rec

我正在寻找一种工具,它可以在不到半秒的时间内告诉我麦克风是否接收到高于某个阈值的任何声音。(我计划然后使用另一个命令行工具将主通道静音,例如 amixer。)

Chr*_*dal 10

此解决方案将避免重复写入磁盘,即使在最坏的情况下它需要一秒钟而不是所需的不到半秒,但我在尝试后发现它足够快。所以,这是我使用的两个脚本:

。/探测:

while true; do
    arecord -d 1 /dev/shm/tmp_rec.wav ; sox -t .wav /dev/shm/tmp_rec.wav -n stat 2>\
    &1 | grep "Maximum amplitude" | cut -d ':' -f 2 | ./check.py
    if [ $? -eq 0 ] ; then
         amixer set Master 0
    else
         amixer set Master 80
    fi
done
Run Code Online (Sandbox Code Playgroud)

./check.py:

#!/usr/bin/env python
import sys

number = 0.0
thing="NO"

line = sys.stdin.readline()
thing = line.strip()
number = float(thing)

if number < 0.15:
    raise Exception,"Below threshold"
Run Code Online (Sandbox Code Playgroud)

几乎不优雅,但它有效。

注意:如果您想要更渐进的东西,请添加如下内容:

   for i in `seq 0 80 | tac`; do
      amixer set Master $i
   done
Run Code Online (Sandbox Code Playgroud)

用于静音和

   for i in `seq 0 80`; do
      amixer set Master $i
   done
Run Code Online (Sandbox Code Playgroud)

取消静音。

  • 一个稍微优雅的解决方案,它支持半秒分辨率并且不需要临时文件:`while true; do amixer set Master $(rec -n stat trim 0 .5 2&gt;&amp;1 | awk '/^最大振幅/ { print $3 &lt; .15 ? 80 : 0 }'); 完成` (8认同)