Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Cómo evitar el control automático de ganancia con AudioRecord?

¿Cómo puedo hacer grabaciones de audio usando android.media.AudioRecord sin procesamiento de señal de fantasía dependiente del fabricante de teléfonos inteligentes como control automático de ganancia (AGC) y / o ecualización, supresión de ruido, cancelación de eco, … sólo la señal de micrófono puro?

Fondo

MediaRecorder.AudioSource proporciona nueve constantes,

  • DEFAULT y MIC inicialmente,
  • VOICE_UPLINK , VOICE_DOWNLINK y VOICE_CALL añadidos en el nivel 4 de la API,
  • VOICE_RECOGNITION y VOICE_RECOGNITION añadido en API 7,
  • VOICE_COMMUNICATION añadido en API 11,
  • REMOTE_SUBMIX agregado en API 19 pero no disponible para aplicaciones de terceros.

Pero ninguno de ellos hace un trabajo limpio en todos los teléfonos inteligentes. Más bien, tengo que averiguar a mí mismo parece, que dispositivo utiliza qué combinaciones de los bloques de procesamiento de señal para que MediaRecorder.AudioSource constante.

Sería bueno tener una décima constante como PURE_MIC añadida en el nivel API 20.

Pero mientras esto no esté disponible, ¿qué puedo hacer en su lugar?

  • Aumentar la salida de volumen del audio grabado
  • Demora en la transmisión de audio
  • PhoneGap plugin de Android para la grabación de audio de mayor calidad?
  • ¿Cómo saber si un MediaRecorder está en estado de ejecución o no?
  • Advertencia: File.mkdir () se ignora
  • <AudioRecord> "No se pudo obtener la entrada de audio para la fuente de grabación 1"
  • Android AudioRecord que configuraciones para grabar llamadas
  • ¿Cómo puedo pausar la grabación de voz en Android?
  • 3 Solutions collect form web for “¿Cómo evitar el control automático de ganancia con AudioRecord?”

    La respuesta corta es "Nada".

    Los AudioSources corresponden a varios dispositivos lógicos de entrada de audio, dependiendo de los accesorios que hayas conectado al teléfono y el caso de uso actual, que a su vez corresponde a dispositivos físicos (micrófono incorporado primario, micrófono secundario, micrófono con micrófono con cable, etc.) Con diferentes afinaciones.

    Cada una de estas combinaciones de dispositivos físicos y sintonización es recortada por el OEM para satisfacer tanto requisitos externos (por ejemplo, CTS, requisitos del operador, etc.) como los requisitos acústicos internos establecidos por el propio OEM. Este proceso puede provocar la introducción de varios filtros (como AGC, supresión de ruido, ecualización, etc.) en la ruta de entrada de audio en el codec de hardware o en el nivel multimedia DSP.

    Aunque una fuente PURE_MIC puede ser útil para algunas aplicaciones, no es algo que esté disponible hoy en día.
    En muchos dispositivos puedes controlar cosas como la ganancia del micrófono, y posiblemente incluso la cadena del filtro, usando amixer para escribir en los controles ALSA del codec de hardware. Sin embargo, esto obviamente sería un enfoque muy específico de la plataforma, y ​​también sospecho que tiene que estar ejecutándose como usuario root o de audio para poder hacer esto.

    Algunos dispositivos agregan el efecto AGC al canal de entrada de sonido de forma predeterminada. Por lo tanto, necesita obtener referencia al objeto AudioEffect correspondiente y forzarlo a deshabilitarlo.

    Primero, obtenga el objeto AutomaticGainControl enlazado a la sesión de audio de AudioRecord y, a continuación, simplemente establézcalo desactivado:

     if (AutomaticGainControl.isAvailable()) { AutomaticGainControl agc = AutomaticGainControl.create( myAudioRecord.getAudioSessionId() ); agc.setEnabled(false); } 

    Nota: La mayoría de las fuentes de audio (incluyendo DEFAULT) aplican el procesamiento a la señal de audio. Para grabar audio en bruto, seleccione UNPROCESSED. Algunos dispositivos no admiten entrada no procesada. Llame a AudioManager.getProperty ("PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED") primero para verificar que está disponible. Si no lo es, intente usar VOICE_RECOGNITION en su lugar, que no emplea AGC o supresión de ruido. Puede utilizar UNPROCESSED como una fuente de audio incluso cuando la propiedad no es compatible, pero no hay garantía de que la señal no se procese o no en ese caso.

    Documentación de Android Enlace https://developer.android.com/guide/topics/media/mediarecorder.html#example

      AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); if(audioManager.getProperty(AudioManager.PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED) !=null) mRecorder.setAudioSource(MediaRecorder.AudioSource.UNPROCESSED); else mRecorder.setAudioSource(MediaRecorder.AudioSource.VOICE_RECOGNITION); 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.