私は、この種の問題を解決する一種の不安定な方法を見つけました。
無音が検出されると、soxはファイルに音を追加するまで自然にファイルに追加しません。それで、私はこの事実を利用しようと決めました。
まず、バックグラウンドでsoxのサウンドレコーダーを起動します。
rec /tmp/recording.flac rate 32k silence 1 0.1 3% -1 3.0 3% &
次に、記録プロセスのPIDを取得します。 p=$!
次に、記録プロセスに1秒を与えて起動を終了し、ファイルが大きくなり始めるまで待ちます。
寝る1
until ["$ var1"!= "$ var2"]; 行う
var1 = `du" /tmp/recording.flac "`
寝る1
var2 = `du" /tmp/recording.flac "`
やった
このループが切れると、音が検出されたことを意味します。そこで、別のループを作成して、データがファイルに追加されなくなるまで待機します(これは、soxが再び無音を検出すると発生します)。
echo "検出された音"
until "" $ var1 "==" $ var2 "]; 行う
var1 = `du" /tmp/recording.flac "`
睡眠0.5
var2 = `du" /tmp/recording.flac "`
やった
今、私はちょうど終了する必要がありますrec
:
echo "Silence Detected"
$ pを殺す
以上です。完成したスクリプトは次のとおりです。
rec /tmp/recording.flac rate 32k無音1 0.1 3%-1 3.0 3%&
p = $!
寝る1
until ["$ var1"!= "$ var2"]; 行う
var1 = `du" /tmp/recording.flac "`
寝る1
var2 = `du" /tmp/recording.flac "`
やった
echo "検出された音"
until "" $ var1 "==" $ var2 "]; 行う
var1 = `du" /tmp/recording.flac "`
睡眠0.5
var2 = `du" /tmp/recording.flac "`
やった
echo "Silence Detected"
$ pを殺す
今、私はこれを行うためのより良い、より安定した方法を好むでしょうが、これは今のところ動作する必要があります。