Эффект Сокс: повторяющаяся тишина

Чтобы обнаружить речь, я играю с этой командой 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

Опять же - это потребовало много экспериментов со значениями "молчания", и это потребует некоторой настройки для вашей среды.

Другие вопросы по тегам