사용 sox
에서 삭스 짧은 오디오 샘플을 분석 :
sox -t .wav "|arecord -d 2" -n stat
함께 -t .wav
우리는 우리가 WAV 형식을 처리하는 지정 "|arecord -d 2"
실행 arecord
, 2 초 동안 프로그램을 -n
널 (null) 파일로 출력하고, 함께 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) )) ; # ...
1 분 동안 절전 모드 를 호출 하고 볼륨을 테스트 한 다음 반복 하는 루프 ( 배시 예제 참조)를 빌드 하면 백그라운드에서 실행 상태로 둘 수 있습니다. 마지막 단계는 수동으로 시작할 필요가 없도록 init 스크립트 또는 서비스 파일 (OS / distro에 따라 다름)에 추가하는 것입니다.