Я пишу сценарий, который использует sox для записи моего разговора. Теперь мне нужно, чтобы sox подождал, пока он не обнаружит звук, прежде чем начать запись, и я понял это. Но я также должен Сокс выхода , как только там была тишина в течение по крайней мере 3 секунды. Как и сейчас, я должен вручную убить sox, как только я закончу говорить, иначе sox просто ждет снова, пока я не говорю еще, добавляя к выходному файлу (это не то, что я хочу). Вот команда для записи, которую я использую сейчас:
rec /tmp/recording.flac rate 32k silence 1 0.1 3% -1 3.0 3%
Опять же, просто для ясности, Сокс должен подождать, пока я начну говорить, а затем записать, пока я не перестану говорить, тогда программа Сокс должна завершиться.
Я подправил вышеупомянутые идеи еще немного. Он записывает вечно, записывает весь шум до (примерно) секунды тишины. Потом:
(Делает для очень удобного небольшого UHF / 2-метрового эхолота)
источник
Я нашел какой-то шаткий способ, который решает эту проблему.
Я заметил, что при обнаружении молчания sox, естественно, больше ничего не добавляет в файл, пока не услышит больше звука. Поэтому я решил, что могу попытаться воспользоваться этим фактом.
Прежде всего, я запускаю диктофон sox в фоновом режиме:
Затем я получаю PID процесса записи с помощью:
p=$!
Затем я даю процессу записи секунду, чтобы закончить запуск, а затем жду, пока файл начнет расти.
После обрыва этого цикла звук будет обнаружен. Так что теперь я создаю еще один цикл, чтобы ждать, пока данные не перестанут добавляться в файл (это произойдет, когда sox снова обнаружит тишину)
Теперь мне просто нужно выйти
rec
:Вот и все. Вот законченный скрипт:
Теперь я бы предпочел лучший, более стабильный способ сделать это, но сейчас это сработает.
источник
Он слушает вечно, записывает только последние звуки, пока не услышит одну секунду тишины, затем записывает файл, ставит метки времени и перезапускает:
источник
while true
петли