Использование 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%

Для справки, это запись звука с микрофона по умолчанию и вывод звука в формате с прямым порядком байтов, ulaw с 8 битами и скоростью 8k. Фильтр эффектов обрезает звук до тех пор, пока шум не достигнет порогового значения в течение 0,3 секунды, а затем продолжает запись, пока не будет 0,3 секунды тишины. Все это передается на стандартный вывод, который я использую для потоковой передачи на удаленный сервер.

Я использую все это, чтобы записать немного голоса и закончить, когда закончу говорить. Чтобы запустить sox, я использую специальное оборудование для запуска записи. Я могу переключиться на использование практически любого аудиоформата или кодека, если он поддерживает форматирование/кодирование «на лету». Моя целевая платформа — raspbian на raspberry pi 2 B.

Моим идеальным решением было бы использовать vad для остановки записи, когда пользователь заканчивает говорить. Я надеюсь, что это будет работать даже с фоновой болтовней. Однако в документации sox об эффекте vad говорится следующее:

Рекомендуется использовать эффект нормы, но помните, что ни реверс, ни норма не подходят для использования с потоковым аудио.

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


person Jim Cortez    schedule 02.05.2015    source источник


Ответы (1)


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

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

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

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

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

person mik    schedule 12.05.2015