ฉันพบวิธีสั่นคลอนชนิดที่แก้ปัญหานี้
ฉันสังเกตเห็นว่าเมื่อตรวจพบความเงียบ sox จะไม่ผนวกสิ่งใด ๆ กับไฟล์เพิ่มเติมจนกว่าจะได้ยินเสียงมากขึ้น ดังนั้นฉันจึงตัดสินใจลองใช้ประโยชน์จากข้อเท็จจริงนี้
ก่อนอื่นฉันเริ่มบันทึกเสียงของ 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 ตรวจพบความเงียบอีกครั้ง)
echo "ตรวจจับเสียง"
จนถึง ["$ var1" == "$ var2"]; ทำ
var1 = `du" /tmp/recording.flac "`
นอน 0.5
var2 = `du" /tmp/recording.flac "`
เสร็จแล้ว
ตอนนี้ฉันต้องออกrec
:
echo "เงียบตรวจพบ"
ฆ่า $ 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 "`
เสร็จแล้ว
echo "ตรวจจับเสียง"
จนถึง ["$ var1" == "$ var2"]; ทำ
var1 = `du" /tmp/recording.flac "`
นอน 0.5
var2 = `du" /tmp/recording.flac "`
เสร็จแล้ว
echo "เงียบตรวจพบ"
ฆ่า $ p
ตอนนี้ฉันต้องการวิธีที่ดีกว่าและมีเสถียรภาพมากขึ้นในการทำสิ่งนี้ แต่ตอนนี้จะต้องใช้งานได้