使用sox
从SOX分析很短的音频采样:
sox -t .wav "|arecord -d 2" -n stat
通过-t .wav
指定,我们处理wav类型,"|arecord -d 2"
执行arecord
程序两秒钟,-n
输出到空文件,并stat
指定我们想要的统计信息。
该命令在我的系统上带有一些背景说明的输出为:
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
然后可以通过以下方式提取最大幅度:
grep -e "RMS.*amplitude" | tr -d ' ' | cut -d ':' -f 2
我们grep
针对所需的行,tr
先剪掉空格字符,然后cut
按字符剪掉,然后:
取第二部分,0.068383
在本示例中为我们提供。正如评论所建议的那样,RMS是比最大幅度更好的能量度量。
您最终可以bc
在结果上使用命令行来比较浮点值:
if (( $(echo "$value > $threshold" | bc -l) )) ; # ...
如果您构建一个循环(请参阅Bash示例),该循环调用sleep 1分钟,测试音量,然后重复播放,则可以使其在后台运行。最后一步是将其添加到初始化脚本或服务文件中(取决于您的OS /发行版),这样您甚至不必手动启动它。