Bu sorunu çözen bir tür titrek yol buldum.
Sessizlik algılandığında, sox'un doğal olarak daha fazla ses duyana kadar dosyaya daha fazla bir şey eklemeyeceğini fark ettim. Bu yüzden bu gerçeği değerlendirmeye karar verdim.
Her şeyden önce, arka planda sox'un ses kaydedicisini başlatıyorum:
rec /tmp/recording.flac rate 32k silence 1 0.1 3% -1 3.0 3% &
Sonra ile kayıt sürecinin PID olsun: p=$!
Sonra kayıt işlemine başlamayı bitirmek için bir saniye veriyorum ve sonra dosya büyümeye başlayana kadar bekliyorum.
uyku 1
kadar ["$ var1"! = "$ var2"]; yapmak
var1 = "du" /tmp/recording.flac "`
uyku 1
var2 = "du" /tmp/recording.flac "`
tamam
Bu döngü bozulduktan sonra ses algılanır. Şimdi veri dosyaya eklenmesini durdurmak için beklemek için başka bir döngü oluşturmak (Bu sox bir kez daha sessizlik algıladığında olacak).
echo "Ses Algılandı"
kadar ["$ var1" == "$ var2"]; yapmak
var1 = "du" /tmp/recording.flac "`
uyku 0.5
var2 = "du" /tmp/recording.flac "`
tamam
Şimdi sadece bırakmam gerek rec
:
echo "Sessizlik Tespit Edildi"
$ p öldür
Ve bu kadar. Tamamlanan komut dosyası:
rec /tmp/recording.flac oranı 32k sessizlik 1 0,1 3% -1 3,0 3% &
p = $!
uyku 1
kadar ["$ var1"! = "$ var2"]; yapmak
var1 = "du" /tmp/recording.flac "`
uyku 1
var2 = "du" /tmp/recording.flac "`
tamam
echo "Ses Algılandı"
kadar ["$ var1" == "$ var2"]; yapmak
var1 = "du" /tmp/recording.flac "`
uyku 0.5
var2 = "du" /tmp/recording.flac "`
tamam
echo "Sessizlik Tespit Edildi"
$ p öldür
Şimdi bunu yapmanın daha iyi, daha istikrarlı bir yolunu tercih ederim, ama bunun şimdilik çalışması gerekecek.