В настоящее время я использую Sox, как это:Использование 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%
Для справки, это запись звука с микрофона по умолчанию и вывода Little Endian, ULAW отформатированный аудио в 8 бит и 8k ставка. Фильтр эффектов обрезает звук до тех пор, пока шум не достигнет порога в течение 0,3 секунды, а затем продолжит запись до тех пор, пока не будет 0,3 секунды молчания. Все эти потоки в stdout, которые я использую для потоковой передачи на удаленный сервер.
Я использую все это, чтобы записать немного голоса и закончить, когда я закончил говорить. Для запуска sox я использую специализированное оборудование для запуска начала записи. Я могу переключиться на использование практически любого аудиоформата или кодека, если он поддерживает форматирование/кодирование на лету. Моя целевая платформа raspbian на малине pi 2 B.
Моим идеальным решением было бы использовать vad для остановки записи, когда пользователь закончит говорить. Я надеюсь, что это сработает даже с фоновой болтовней. Однако документация сокс на VAD эффект состояний этого:
рекомендуется использование эффекта нормы, но помните, что ни обратное, ни норма подходит для использования с потоковым аудио.
Я не смог скомпоновать параметры, чтобы получить вад и потоковое управление. Можно ли использовать эффект vad, чтобы остановить запись звука, сохраняя при этом трубку stdin-> sox-> stdout? Есть ли лучшие альтернативы?