Как отключить AGC на HTC EVO (Sussonic)?

Я работаю над приложением, которое должно выполнять алгоритмы распознавания необработанного звука PCM, снятого с микрофона. На всех устройствах Android, которые я тестировал, можно использовать данные PCM (то есть необработанные аудиоданные). Это не относится к новому Sprint EVO.

Sprint EVO имеет AGC (автоматическая регулировка усиления) на микрофоне, которая уничтожает данные, так что наши алгоритмы распознавания больше не работают.

Я считаю, что это функция, которую HTC добавила в ОС для этого устройства (и, возможно, будущих устройств). Я протестировал наше приложение на нескольких других устройствах с той же версией ОС (2.1), и эти другие устройства работают нормально.

К сожалению, HTC еще не опубликовала код, используемый на этом устройстве. Я ожидаю, что мне, возможно, придется использовать JNI, чтобы обойти это для этого конкретного устройства, и я готов это сделать, но без доступа к исходному коду HTC я бы не знал, с чего начать.

Невозможно обратить вспять эффекты AGC, поэтому я застрял, пытаясь обойти это.

Более конкретная информация:

Я использую AudioRecorder, чтобы получить доступ к необработанным данным PCM. Я попробовал несколько программ, которые используют MediaRecorder для записи данных AMR, и эти записи также демонстрируют те же свойства AGC.

Одна вещь, которую мне еще предстоит попробовать, - это написать свои собственные процедуры для использования MediaRecorder и использования setAudioSource(AudioSource.VOICE_RECOGNITION). Единственная документация, которую я могу найти по этому флагу, — это ссылка на Android, в которой просто говорится: «Источник звука микрофона, настроенный для распознавания голоса, если он доступен, в противном случае ведет себя как ПО УМОЛЧАНИЮ». Это может быть то, что мне нужно, но потребует дополнительного шага декодирования данных AMR, чтобы получить данные PCM (что я сделаю, если понадобится).

Если кто-нибудь что-нибудь знает об этой новой "функции", буду признателен за любую информацию. В частности, моя жизнь была бы намного лучше, если бы я знал ответы на любой из следующих вопросов:

  1. Эта новая функция специфична для HTC?
  2. Когда HTC выпустит свою кодовую базу для EVO/Susonic?
  3. Кто-нибудь еще сталкивался с этим и нашел способ обойти проблему?
  4. Действительно ли AudioSource.VOICE_RECOGNITION предотвращает AGC?
  5. Указывает ли наличие AudioSource.VOICE_RECOGNITION на то, что ожидается, что это будет более распространено в будущих устройствах, и этот флаг предназначен для его обхода?

Любые другие подсказки, подсказки, советы будут с благодарностью.


person pnettle    schedule 09.06.2010    source источник


Ответы (2)


Как оказалось, я нашел решение, просматривая депо Android git:

AudioRecord ar = 
    new AudioRecord(MediaRecorder.AudioSource.VOICE_RECOGNITION, ...);

Для устройств под управлением OS 2.1 и выше это позволяет получать аудиопоток, на который не влияет АРУ, и который по-прежнему является высококачественным 16-битным потоком данных PCM.

Я ориентирую свое приложение на версию 1.5 и выше, и этот флаг VOICE_RECOGNITION не поддерживается до уровня API 7 (ОС 2.1). Однако, поскольку EVO работает под управлением v2.1, и я относительно уверен, что это не будет проблемой для любого устройства до OS 2.1, простая проверка версии позволит ограничить решение только теми устройствами, которые нуждаются в поддержите это.

person pnettle    schedule 09.06.2010

К сожалению,

AudioRecord ar = 
    new AudioRecord(MediaRecorder.AudioSource.VOICE_RECOGNITION, ...);

не является общим решением. Некоторые производители применяют AGC, даже если выбран MediaRecorder.AudioSource.VOICE_RECOGNITION. Они просто игнорируют «Определение совместимости» Google. См. Как избежать автоматической регулировки усиления с помощью AudioRecord?

person Hartmut Pfitzinger    schedule 28.02.2013