Я работаю над приложением, которое должно выполнять алгоритмы распознавания необработанного звука 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 (что я сделаю, если понадобится).
Если кто-нибудь что-нибудь знает об этой новой "функции", буду признателен за любую информацию. В частности, моя жизнь была бы намного лучше, если бы я знал ответы на любой из следующих вопросов:
- Эта новая функция специфична для HTC?
- Когда HTC выпустит свою кодовую базу для EVO/Susonic?
- Кто-нибудь еще сталкивался с этим и нашел способ обойти проблему?
- Действительно ли AudioSource.VOICE_RECOGNITION предотвращает AGC?
- Указывает ли наличие AudioSource.VOICE_RECOGNITION на то, что ожидается, что это будет более распространено в будущих устройствах, и этот флаг предназначен для его обхода?
Любые другие подсказки, подсказки, советы будут с благодарностью.