Я работаю над приложением, которое должно выполнять алгоритмы распознавания необработанного звука PCM, захваченного с микрофона. На всех устройствах Android, которые я тестировал, данные PCM можно использовать (т. Е. Необработанные аудиоданные.) Это не относится к новому Sprint EVO.
Sprint EVO имеет AGC (Auto Gain Control) на микрофоне, который уничтожает данные так, что наши алгоритмы распознавания больше не работают.
Я полагаю, что это функция, которую HTC добавила в ОС для этого устройства (и, возможно, для будущих устройств). Я протестировал наше приложение на нескольких других устройствах, используя ту же версию ОС (2.1), и эти другие устройства ведут себя нормально .
К сожалению, HTC еще не опубликовала код, используемый на этом устройстве. Я ожидаю, что мне, возможно, придется использовать JNI, чтобы обойти это для этого конкретного устройства, и я готов сделать это, но без доступа к источнику HTC, я не знаю, с чего начать.
Нет способа обратить эффекты AGC, поэтому я застрял, пытаясь обойти это.
Более конкретная информация:
Я использую AudioRecorder для получения доступа к необработанным данным PCM. Я пробовал несколько программ, которые используют MediaRecorder для записи данных AMR, и эти записи также показывают те же свойства AGC.
Одна вещь, которую мне еще предстоит попробовать, - написать свои собственные подпрограммы для использования MediaRecorder и использовать setAudioSource (AudioSource.VOICE_RECOGNITION). Единственная документация, которую я могу найти по этому флагу, содержится в справочнике по Android, в котором просто говорится: «Источник звука для микрофона, настроенный для распознавания голоса, если он доступен, в противном случае ведет себя как ПО УМОЛЧАНИЮ». Это может быть тем, что мне нужно, но потребует дополнительного этапа декодирования данных AMR, чтобы получить данные PCM (что я и сделаю, если придется).
Если кто-нибудь знает что-либо об этой новой «функции», любая информация будет принята с благодарностью. В частности, моя жизнь была бы намного лучше, если бы у меня были ответы на любой из следующих вопросов:
- Эта новая функция предназначена для HTC?
- Когда HTC выпустит свою кодовую базу для EVO / Supersonic?
- Кто-нибудь еще сталкивался с этим и нашел способ обойти проблему?
- AudioSource.VOICE_RECOGNITION действительно предотвращает AGC?
- Указывает ли наличие AudioSource.VOICE_RECOGNITION, что это ожидается более распространенным в будущих устройствах, и этот флаг является условием для его обхода?
Любые другие подсказки, советы, подсказки будут с благодарностью.