2015-05-02 4 views
8

В настоящее время я использую 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? Есть ли лучшие альтернативы?

ответ

1

Возможно ли использовать эффект вада, чтобы остановить запись звука, сохраняя при этом трубку stdin-> sox-> stdout?

No. Эффект vad может обрезать тишину только с передней стороны аудио. Таким образом, вы можете использовать его только для обнаружения начала записи, а не для завершения и паузы.

Фильтры reverse и norm нуждаются во всех входных данных, прежде чем они выдадут какие-либо данные на выходе, поэтому они не могут использоваться с потоковой передачей.

Ключ должен выбрать хороший порог для фильтра silence, так что он принимает «фотовую болтовню» как тишину.

Вы можете использовать также noisered (с профилем, основанным на предыдущих записях) до silence, чтобы уменьшить шум, вызывающий запись, но это также повлияет на выход и, вероятно, не будет воспринимать «фотовую болтовню» как шум.