Вместо того, чтобы кодировать это самостоятельно, рассмотрите использование Бродяги, которая создается, чтобы инстанцировать и управлять virtualbox экземплярами. Документация превосходна, и я предлагаю, чтобы Вы проверили ее вместо того, чтобы пытаться к самокрутке.
Длинное и за исключением него - то, что Вы создаете простой файл управления и затем работаете vagrant up
запустить столько экземпляров VirtualBox, сколько Вы хотите. Можно использовать vagrant ssh
входить в хосты и vagrant halt
завершать работу хоста (не завершаясь). vagrant destroy
избавится от экземпляров.
Это поддерживает настройку с марионеткой, Ansible или Chef и позволяет Вам управлять большинством выставленных параметров конфигурации VBox.
Удалите знак минус из своей исходной команды:
rec /tmp/recording.flac rate 32k silence 1 0.1 3% 1 3.0 3%
Когда "ниже количества" будет отрицательно, команда тишины обрежет, все заставляет замолчать с середины файла. Когда это положительно, это обрезает тишину от конца файла.
Я нашел, что своего рода шаткий путь такой решает эту проблему.
Я заметил, что, когда тишина обнаруживается, носки естественно не добавят ничего больше в файл, пока это не услышит более звуковой. Таким образом, я решил, что мог попытаться использовать в своих интересах этот факт.
В первую очередь, я запускаю устройство звукозаписи носков в фоновом режиме:
rec /tmp/recording.flac rate 32k silence 1 0.1 3% -1 3.0 3% &
Затем я получаю PID процесса записи с: p=$!
Затем я даю процессу записи секунду, чтобы закончить запустить и затем ожидать, пока файл не начинает расти.
sleep 1 until [ "$var1" != "$var2" ]; do var1=`du "/tmp/recording.flac"` sleep 1 var2=`du "/tmp/recording.flac"` done
После этого разрывы замкнутой цепи, который означает, что звук был обнаружен. Таким образом, теперь я создаю другой цикл для ожидания, пока данные не прекратят добавляться в файл (Это произойдет, после того как носки обнаруживают тишину снова).
echo "Sound Detected" until [ "$var1" == "$var2" ]; do var1=`du "/tmp/recording.flac"` sleep 0.5 var2=`du "/tmp/recording.flac"` done
Теперь я просто должен выйти rec
:
echo "Silence Detected" kill $p
И вот именно. Вот завершенный сценарий:
rec /tmp/recording.flac rate 32k silence 1 0.1 3% -1 3.0 3% & p=$! sleep 1 until [ "$var1" != "$var2" ]; do var1=`du "/tmp/recording.flac"` sleep 1 var2=`du "/tmp/recording.flac"` done echo "Sound Detected" until [ "$var1" == "$var2" ]; do var1=`du "/tmp/recording.flac"` sleep 0.5 var2=`du "/tmp/recording.flac"` done echo "Silence Detected" kill $p
Теперь я предпочел бы лучший, более стабильный способ сделать это, но это должно будет работать на данный момент.
Это слушает навсегда, записи только последние звуки, пока это не слышит, одна секунда тишины, затем пишет файл, добавляет метку времени к нему, и перезапуски:
#!/bin/bash
/usr/bin/sox -t alsa default /home/default/working/recording.wav silence 1 0.1 5% 1 1.0 5%
DATE=$(date +%Y%m%d%H%M%S)
mv /home/default/working/recording.wav /home/default/waiting/$DATE.recording.wav
/home/default/startrecord.sh
Я немного изменил приведенные выше идеи. Он записывает вечно, записывает весь шум, пока (примерно) не встретится секунда тишины. Затем:
(Для очень удобного маленького повторителя эха UHF / 2 метра)
#!/bin/bash while true; do rec buffer.ogg silence 1 0.1 5% 1 1.0 5% DATE=`date +%Y%m%d%H%M%S` DPATH=`date +%Y/%m/%d/` mkdir -p ./spectro/$DPATH mkdir -p ./voice/$DPATH echo Renaming buffer file to $DATE sox buffer.ogg -n spectrogram -x 300 -y 200 -z 100 -t $DATE.ogg -o ./spectro/$DPATH/$DATE.png sox buffer.ogg normbuffer.ogg gain -n -2 sox normbuffer.ogg -n spectrogram -x 300 -y 200 -z 100 -t $DATE.norm.ogg -o ./spectro/$DPATH/$DATE.norm.png mv normbuffer.ogg ./voice/$DPATH/$DATE.ogg play pre.ogg ./voice/$DPATH/$DATE.ogg post.ogg done