Какой источник звука использовать: MIC, VOICE_RECOGNITION, VOICE_COMMUNICATION и другие

Короткий ответ: для обычной записи голоса — VOICE_RECOGNITION (лучше шумоподавление), для VoIP — VOICE_COMMUNICATION (AEC/NS и низкая задержка), для съёмки видео — CAMCORDER, для простых диктофонов — MIC; VOICE_CALL доступен только системным приложениям.

Краткий обзор основных AudioSource

  • MIC — стандартный микрофон, совместим, но чувствителен к фону. Подходит для диктофонов и подкастов в тихой обстановке.
  • VOICE_RECOGNITION — микрофон с преднастроенным шумоподавлением и эхоподавлением, оптимизирован для распознавания речи и ассистентов.
  • VOICE_COMMUNICATION — для VoIP: минимальная задержка, автоматически включает AEC/NS на поддерживаемых устройствах.
  • CAMCORDER — сбалансирован для записи аудио вместе с видео, снижает рассинхрон.
  • VOICE_CALL — доступен только для системных/предустановленных приложений; большинству сторонних программ недоступен из-за ограничений безопасности.
  • DEFAULT, REMOTE_SUBMIX, FM_RADIO и т.п. — либо общие, либо устаревшие; избегайте REMOTE_SUBMIX и FM_RADIO в обычных приложениях.

Тестируйте на реальных устройствах и с разными микрофонами (встроенный, гарнитура, USB). Эмулятор не отражает реальную акустику.

Как выбрать источник — практическая инструкция

  1. Определите задачу: распознавание речи, звонки, запись видео или простая запись.
  2. Начните с рекомендуемого источника:
    • Распознавание и голосовые ассистенты — VOICE_RECOGNITION.
    • VoIP/конференции — VOICE_COMMUNICATION.
    • Синхронная запись с камерой — CAMCORDER.
    • Универсальная простая запись — MIC.
  3. Проверьте поддержку на устройстве:
    • Используйте AudioManager.getDevices() и AudioRecord.getActiveRecordingConfigurations().
    • Обратите внимание на Android-версию: VOICE_CALL и некоторые низкоуровневые источники ограничены с Android 9/10+.
  4. Настройка параметров:
    • Частота 16 kHz достаточна для речи; для музыки используйте 44.1/48 kHz.
    • Формат PCM_16BIT и CHANNEL_IN_MONO для речи — экономия батареи и привычный стандарт.
  5. Обработка:
    • Включайте AcousticEchoCanceler и NoiseSuppressor, если они доступны на устройстве.
    • Для фоновых записей используйте foreground service (ограничения Android 10+).

VOICE_CALL и REMOTE_SUBMIX часто недоступны для сторонних приложений. Не полагайтесь на них — это приведёт к ошибкам и нулевому звуку на большинстве устройств.

Примеры кода (Kotlin)

Простой AudioRecord для распознавания речи:

val audioSource = MediaRecorder.AudioSource.VOICE_RECOGNITION
val sampleRate = 16000
val channelConfig = AudioFormat.CHANNEL_IN_MONO
val audioFormat = AudioFormat.ENCODING_PCM_16BIT
val bufferSize = AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat)
val recorder = AudioRecord(audioSource, sampleRate, channelConfig, audioFormat, bufferSize)

Не забудьте REQUEST_PERMISSION RECORD_AUDIO и проверку PackageManager.PERMISSION_GRANTED перед стартом.

Частые ошибки

  • Выбор VOICE_CALL для стороннего приложения — запись не начнётся на большинстве устройств.
  • Использование высокой частоты дискретизации без необходимости — тратит батарею и увеличивает задержку.
  • Тестирование только в эмуляторе — реальная акустика и доступные эффекты могут отличаться.
  • Отсутствие проверки наличия AcousticEchoCanceler/NoiseSuppressor — попытка включить их без проверки вызовет ошибки.

FAQ

  • Нужно ли всегда включать шумоподавление?
    Да, если задача — распознавание речи или звонки; но проверяйте доступность эффекта на устройстве перед включением.

  • Какой AudioSource выбрать для подкаста?
    MIC или EXTERNAL_MIC (если есть внешнее оборудование). Для лучшего качества применяйте внешние микрофоны + обработку на стороне сервера/редактора.

  • Что делать, если запись идёт в тишине на некоторых устройствах?
    Проверьте разрешения, AudioSource (VOICE_CALL/REMOTE_SUBMIX часто недоступны), и используйте AudioManager для определения активных устройств и ролей аудио.

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