Обнаружение голосовой активности в Android

Я пишу приложение, которое будет вести себя аналогично существующему распознаванию голоса, но будет отправлять звуковые данные в проприетарную веб-службу для выполнения части распознавания речи. Я использую стандартный MediaRecord (который закодирован AMR-NB), который кажется идеальным для распознавания речи. Единственные данные, предоставляемые этим, - это амплитуда с помощью метода getMaxAmplitude ().

Я пытаюсь определить, когда человек начинает говорить, чтобы, когда человек прекращает говорить примерно на 2 секунды, я могу приступить к отправке звуковых данных в веб-службу. Прямо сейчас я использую порог амплитуды, который, если он превышает значение (например, 1500), я предполагаю, что человек говорит. Меня беспокоит то, что уровни амплитуды могут различаться в зависимости от устройства (например, Nexus One v Droid), поэтому я ищу более стандартный подход к этому, который может быть получен из значений амплитуды.

P.S. Я посмотрел на график-амплитуду, но он не дает возможности сделать это только с амплитудой.


person Eliseo    schedule 15.10.2010    source источник


Ответы (3)


Что ж, это может не сильно помочь, но как насчет того, чтобы начать с измерения шума смещения, захваченного приложением микрофоном устройства, и динамически применить порог на основе этого? Таким образом, вы сможете адаптировать его к микрофонам различных устройств, а также к среде, в которой пользователь его использует в данный момент.

person Luis Miguel Serrano    schedule 16.10.2010
comment
Это в значительной степени то, чем я собираюсь заняться. Получите начальный уровень амплитуды, а затем примените порог на его основе. - person Eliseo; 18.10.2010

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

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

person gregm    schedule 18.10.2010
comment
Это правда, мне придется отрегулировать порог, но он должен быть достаточно разумным, чтобы не пропустить ни одного произнесенного слова, даже если мы получим ложное срабатывание. Это должно быть слепое прослушивание, поскольку я не знаю способа распознать слово только по амплитуде на входе. - person Eliseo; 18.10.2010

Большинство смартфонов оснащены датчиком приближения. В Android есть API для использования этих датчиков. Этого было бы достаточно для описанной вами работы. Когда пользователь подносит телефон к уху, вы можете закодировать приложение, чтобы начать запись. Это должно быть достаточно легко.

Класс датчика для Android

person anto8421    schedule 16.10.2010
comment
Я не думаю, что смогу использовать это, поскольку человек может просто разговаривать по телефону, не поднося его к уху. - person Eliseo; 18.10.2010