9

Utilizo la clase AudioRecord para grabar la voz durante una llamada.Android AudioRecord qué configuraciones grabar llamadas

Estoy interesado en grabar solo la voz de la persona propietaria del teléfono (desde el micrófono). Durante la grabación, me gustaría hacer algo de procesamiento de audio, pero esto es algo fuera de lo común por el momento.

Android tiene las siguientes opciones: Audiosources

  • MediaRecorder.AudioSource.VOICE_CALL
  • MediaRecorder.AudioSource.MIC
  • MediaRecorder.AudioSource.VOICE_UPLINK
  • MediaRecorder.AudioSource.VOICE_DOWNLINK

¿Puede explicarnos cuáles son las diferencias entre ellos? Ok MIC es obvio pero VOICE_CALL vs VOICE_UPLINK vs VOICE_DOWNLINK?

También debo elegir una frecuencia de muestreo (8000Hz, 16000Hz, 2250Hz, 44100Hz). ¿Puedes decirme qué frecuencia de muestreo elegir y por qué?

Para el formato de audio que eligió AudioFormat.ENCODING_PCM_16BIT pero también tiene: - AudioFormat.ENCODING_DEFAULT - AudioFormat.ENCODING_INVALID - AudioFormat.ENCODING_PCM_8BIT

último es el número de canales se debe utilizar y por qué? (AudioFormat.CHANNEL_IN_STEREO o AudioFormat.CHANNEL_IN_MONO)

+1

grabación de llamadas es muy difícil en android.In mejores palabras (Mi experiencia personal) no es possible..just google.u puede ver que muchos documentos diciendo que no es possible.because grabación de llamadas está en la capa de base de android os.so no podemos editar esa part.its en binario –

+0

¿En qué versión de Android has probado? Creo que el Api dice que lo admite (oficial) así que lo probaría. – gosom

+1

cuando lo intenté, grabará solo unos segundos ... la grabación es compatible solo con algunos móviles ... compruebe estos enlaces, los cuales son útiles para usted ... http://stackoverflow.com/questions/3929984/recording-call-help -necesario http://stackoverflow.com/questions/8632247/android-call-recording –

Respuesta

10

Siempre debe apuntar al uso de 44100 como frecuencia de muestreo, ya que es la única frecuencia de muestreo que se garantiza que funciona de acuerdo con google.

"la frecuencia de muestreo se expresa en Hertz. 44.100 es actualmente el único tasa que se garantiza que funcione en todos los dispositivos, pero otras tarifas tales como 22050, 16000, 11025 y puede funcionar en algunos dispositivos." Dev site

En cuanto a estéreo frente a mono, utilice mono.

"describe la configuración de los canales de audio. Ver CHANNEL_IN_MONO y CHANNEL_IN_STEREO. CHANNEL_IN_MONO está garantizada para trabajar en todos los dispositivos." Dev site

Por último: 8 bits PCM vs 16 bits PCM: Uso PCM de 16 bits,

"formato de datos de audio:. PCM de 16 bits por muestra garantiza que sea apoyado por los dispositivos ." Dev site

Simplemente recuerde utilizar un búfer corto [] en lugar de un búfer de bytes cuando utilice 16 bits.Desde 16 bits es de 2 bytes que se tiene que combinar dos entradas en el buffer a la vez:

bytes] [] {sample_1_upper, sample_1_lower, sample_2_upper, sample_2_lower, ..., sample_n_lower} Sin embargo, si va a utilizar una corta buffer []:
short [] {sample1, sample2, ..., sample3}

nunca he intentado grabar una llamada, pero si el sistema operativo no se une la fuente MIC que probablemente se podría registrar de eso. Como está grabando desde el micrófono, solo debería obtener la voz de los usuarios.

+0

44100 no se garantiza que funcione) –

+0

Debe informar a la documentación de Android que todavía indica claramente que: "44100Hz es actualmente la única tasa que se garantiza que funciona en todos los dispositivos, pero otras tarifas como 22050, 16000 y 11025 pueden funcionar en algunos dispositivos ". – Risch

+0

La documentación no es cierta, algunos dispositivos no son compatibles con 44100 –

10

¿Puede explicarnos cuál es la diferencia entre ellos? Ok MIC es obvio, pero VOICE_CALL vs VOICE_UPLINK vs VOICE_DOWNLINK?

VOICE_UPLINK: El audio transmitido desde su extremo a la otra parte. IOW, lo que hablas por el micrófono (más el ruido que lo rodea dependiendo de si se usa supresión de ruido y qué tan bien funciona).

VOICE_DOWNLINK: El audio transmitido desde la otra parte hasta su final.

VOICE_CALL: VOICE_UPLINK + VOICE_DOWNLINK.

+0

Hola, en mi caso, quiero ambas grabaciones laterales, pero en algunos dispositivos móviles como Samsung S8plusEdhe, S7edge no funciona, solo graban mi voz, no otra voz secundaria, a la que estoy hablando por teléfono. –

1

Un poco tarde pero puede consultar el dispositivo de audio para averiguar qué puede hacer;

AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 
String sampleRate = audioManager.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE); 
String sampleBufferSize = audioManager.getProperty(AudioManager.PROPERTY_OUTPUT_FRAMES_PER_BUFFER); 
int bufferSize = AudioRecord.getMinBufferSize(Integer.parseInt(sampleRate), AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT); 
+0

Hola, en mi caso, quiero ambas grabaciones laterales, pero en algunos dispositivos móviles, como Samsung S8plusEdhe, S7edge no funciona, solo graban mi voz, no otra voz secundaria, a quienes hablo por teléfono. –

+0

En la última versión de Android, se alentó a los fabricantes a construir sus teléfonos con Voice.Call grabando ambos lados de la llamada (algunos lo estropearon y usaron Voice.Comm). En un momento dado, casi todos los teléfonos lo admitieron y una gran cantidad de terceros sacaron los sistemas de grabación de llamadas (a un gran costo y tiempo) e inscribieron a muchos usuarios, ENTONCES, Android simplemente lo deshabilitó ... Completamente relacionado, pero al mismo tiempo Samsung (el mayor productor de dispositivos Android) presentó su propia solución de grabación de llamadas (que puede eludir la desactivación a medida que crean los teléfonos). –

Cuestiones relacionadas