Эффект Сокс: повторяющаяся тишина
Чтобы обнаружить речь, я играю с этой командой sox:
rec voice.wav silence 1 5 30% 1 0:00:02 30%
Он должен начать запись всякий раз, когда входная громкость возрастает примерно до порога 30% и останавливается через 2 секунды, когда звук падает ниже того же порога.
Оно работает. Но было бы намного лучше, если бы это могло быть "повторным". Я имею в виду: после того, как звук упадет ниже порогового значения и звук снова поднимется, он должен продолжить регистрацию (т.е. пользователь все еще говорит).
Он должен останавливаться только тогда, когда он обнаруживает тишину в течение целых 2 секунд. Или вы рекомендуете какой-либо другой инструмент "VOX"?
1 ответ
Я провел много времени, экспериментируя с SOX, чтобы сделать VOX, и добился того, чтобы он работал достаточно хорошо. Я использовал Audacity для просмотра результирующей формы волны и остановился на следующей команде SOX...
rec snd.wav silence 1 .5 2.85% 1 1.0 3.0% vad gain -n : newfile : restart
Это будет:
- подождите, пока он не услышит активность выше порогового значения в течение полсекунды, затем начните запись (тишина 1,55,85%)
- остановить запись, когда звуковая активность падает на ноль в течение одной секунды (... 1 1,0 3,0%)
- обрезать любую начальную тишину до обнаружения голоса (VAD)
- нормализовать усиление (усиление -n)
- сохранить результат в новый файл (snd001.wav, snd002.wav)
- перезапустить процесс
Получение правильных чисел "тишины" потребовало много проб и ошибок и будет зависеть от окружающего шума, а также от чувствительности вашего микрофона. Я использую микрофон в Logitech QuickCam IM на Raspberry Pi через USB.
С другой стороны, все это жалуется на следующее...
rec FAIL formats: can't open input `default': snd_pcm_open error: No such file or directory
... пока я не создал эту переменную в среде:
export AUDIODEV=hw:1,0
Опять же - это потребовало много экспериментов со значениями "молчания", и это потребует некоторой настройки для вашей среды.