В настоящее время я использую sox следующим образом:
sox -d -e u-law --endian little -b 8 -c 1 -r 8000 -t ul - silence 1 0.3 1% 1 0.3 1%
Для справки, это запись звука с микрофона по умолчанию и вывод звука в формате с прямым порядком байтов, ulaw с 8 битами и скоростью 8k. Фильтр эффектов обрезает звук до тех пор, пока шум не достигнет порогового значения в течение 0,3 секунды, а затем продолжает запись, пока не будет 0,3 секунды тишины. Все это передается на стандартный вывод, который я использую для потоковой передачи на удаленный сервер.
Я использую все это, чтобы записать немного голоса и закончить, когда закончу говорить. Чтобы запустить sox, я использую специальное оборудование для запуска записи. Я могу переключиться на использование практически любого аудиоформата или кодека, если он поддерживает форматирование/кодирование «на лету». Моя целевая платформа — raspbian на raspberry pi 2 B.
Моим идеальным решением было бы использовать vad для остановки записи, когда пользователь заканчивает говорить. Я надеюсь, что это будет работать даже с фоновой болтовней. Однако в документации sox об эффекте vad говорится следующее:
Рекомендуется использовать эффект нормы, но помните, что ни реверс, ни норма не подходят для использования с потоковым аудио.
Мне не удалось собрать параметры вместе, чтобы заставить работать vad и потоковую передачу. Можно ли использовать эффект vad, чтобы остановить запись звука, сохраняя при этом конвейер stdin->sox->stdout? Есть ли лучшие альтернативы?