Saya menemukan semacam cara goyah yang memecahkan masalah ini.
Saya perhatikan bahwa ketika keheningan terdeteksi, sox secara alami tidak akan menambahkan apa pun pada file sampai terdengar lebih banyak suara. Jadi saya memutuskan untuk mencoba dan memanfaatkan fakta ini.
Pertama-tama, saya memulai perekam suara sox di latar belakang:
rec /tmp/recording.flac rate 32k silence 1 0.1 3% -1 3.0 3% &
Selanjutnya saya mendapatkan PID dari proses rekaman dengan: p=$!
Lalu saya memberikan proses rekaman sebentar untuk menyelesaikan memulai, dan kemudian menunggu sampai file mulai tumbuh.
tidur 1
sampai ["$ var1"! = "$ var2"]; melakukan
var1 = `du" /tmp/recording.flac "`
tidur 1
var2 = `du" /tmp/recording.flac "`
selesai
Setelah loop ini putus, itu berarti bahwa suara telah terdeteksi. Jadi sekarang saya membuat loop lain untuk menunggu sampai data berhenti ditambahkan ke file (Ini akan terjadi setelah sox mendeteksi keheningan lagi).
gema "Terdeteksi Suara"
sampai ["$ var1" == "$ var2"]; melakukan
var1 = `du" /tmp/recording.flac "`
tidur 0,5
var2 = `du" /tmp/recording.flac "`
selesai
Sekarang saya hanya perlu berhenti rec
:
gema "Diam Terdeteksi"
bunuh $ p
Dan itu saja. Berikut ini skrip yang lengkap:
rec /tmp/recording.flac rate 32k diam 1 0.1 3% -1 3.0 3% &
p = $!
tidur 1
sampai ["$ var1"! = "$ var2"]; melakukan
var1 = `du" /tmp/recording.flac "`
tidur 1
var2 = `du" /tmp/recording.flac "`
selesai
gema "Terdeteksi Suara"
sampai ["$ var1" == "$ var2"]; melakukan
var1 = `du" /tmp/recording.flac "`
tidur 0,5
var2 = `du" /tmp/recording.flac "`
selesai
gema "Diam Terdeteksi"
bunuh $ p
Sekarang saya lebih suka cara yang lebih baik dan lebih stabil untuk melakukan ini, tetapi ini harus bekerja untuk saat ini.