나는이 문제를 해결하는 일종의 흔들리는 길을 발견했다.
침묵이 감지되면 더 많은 소리가 들릴 때까지 sox가 파일에 아무것도 더 이상 추가하지 않습니다. 그래서 나는이 사실을 이용하려고 노력하기로 결정했습니다.
우선, 백그라운드에서 삭스의 녹음기를 시작합니다.
rec /tmp/recording.flac rate 32k silence 1 0.1 3% -1 3.0 3% &
다음으로 레코딩 프로세스의 PID를 얻습니다. p=$!
그런 다음 레코딩 프로세스를 시작하고 잠시 후에 파일이 커질 때까지 기다립니다.
수면 1
[ "$ var1"! = "$ var2"]까지; 하다
var1 =`du "/tmp/recording.flac"`
수면 1
var2 =`du "/tmp/recording.flac"`
끝난
이 루프가 끊어진 후에는 사운드가 감지되었음을 의미합니다. 이제 파일에 데이터가 추가되지 않을 때까지 기다리는 또 다른 루프를 만듭니다 (이는 sox가 다시 침묵을 감지하면 발생합니다).
에코 "사운드 감지 됨"
[ "$ var1"== "$ var2"]까지; 하다
var1 =`du "/tmp/recording.flac"`
수면 0.5
var2 =`du "/tmp/recording.flac"`
끝난
이제 나는 그냥 종료해야합니다 rec
:
에코 "침묵 감지"
$ p를 죽이다
그리고 그게 다야. 완성 된 스크립트는 다음과 같습니다.
rec /tmp/recording.flac 속도 32k 무음 1 0.1 3 % -1 3.0 3 % &
p = $!
수면 1
[ "$ var1"! = "$ var2"]까지; 하다
var1 =`du "/tmp/recording.flac"`
수면 1
var2 =`du "/tmp/recording.flac"`
끝난
에코 "사운드 감지 됨"
[ "$ var1"== "$ var2"]까지; 하다
var1 =`du "/tmp/recording.flac"`
수면 0.5
var2 =`du "/tmp/recording.flac"`
끝난
에코 "침묵 감지"
$ p를 죽이다
이제는 더 좋고 안정적인 방법을 선호하지만 지금은 효과가 있습니다.