2016-01-14 4 views
5

Мое приложение измеряет объем захваченного звука в зависимости от абсолютной амплитуды выборки.Изменение чувствительности микрофона Android после телефонного звонка

Я заметил и неожиданное поведение в android.media.AudioRecord Android SDK. Давайте предположим, что следующий поток:

  1. приложение запускается
  2. объем звука измеряется
  3. Телефонный звонок ответа/набранный
  4. громкость звука измеряется

Шум вокруг микрофона производится телевизором с постоянной установкой громкости. Значения, измеренные для точки 2, находятся в диапазоне [55-65], а значения, измеренные для точки 4, находятся в диапазоне [15-25] (см. Визуализацию звука для 2. и 4. ниже).

Я понимаю, что при телефонном вызове происходит некоторая регулировка громкости. Можно ли контролировать эти корректировки или избавиться от них?

Я пробовал AutomaticGainControl, но он не поддерживается на моем Nexus 5, и я не хочу его использовать, так как целевые устройства также могут не поддерживать его.

настройка Обновление Этот объем происходит не только после телефонного звонка. Я просто заметил такое же поведение, когда телефон просто лежал на столе, измеряя громкость.

PCM audio before and after the phone call

ответ

1

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

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

  1. Сохранить микрофонный уровень чувствительности к файлу конфигурации (shared_prefs) в вашей активности записи, когда пользователь записывает. делать то же самое, если пользователь меняет его, конечно, во время использования вашего приложения.
  2. В onResume прок Вашей деятельности записи - нагрузить микрофонный значение уровня чувствительности и установить его перед продолжением записи (How to adjust microphone sensitivity while recording audio in android - Solved)

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

Надеюсь, это поможет.

+0

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

+1

Для 1 - сохраните все настройки микрофона, необходимые для каждой записи, и восстановите их, как только ваше приложение вернется на передний план. – FunkSoulBrother

+0

Спасибо за ваши идеи @FunkSoulBrother.Это правильное предложение, но основная проблема для меня выделена в ** Обновление **. Изменение чувствительности произошло со мной без события телефонного звонка - приложение было на переднем плане, а на телефоне даже не было сим-карты. Мне нужно обеспечить качество звука во время записи. –