Frecuencia de muestreo y ruido de Android MediaRecorder
Tengo un problema usando el MediaRecorder de Android para grabar sonido de micrófono a archivos .m4a (AAC-LC, contenedor MPEG-4). A partir del nivel 18 de la API, la velocidad de muestreo por defecto disminuye de 44,1 ó 48 kHz (dependiendo del dispositivo) a sólo 8 Hz. Si especifico la frecuencia de muestreo usando MediaRecorder.setAudioSamplingRate, utiliza la velocidad especificada pero hay un montón de ruido extraño en la grabación.
En LogCat, la siguiente advertencia está ocurriendo de vez en cuando:
- ¿Cómo puedo pausar la grabación de voz en Android?
- Media Recorder start falló en android para cámara
- Android MediaRecorder stop () no se llama
- Mediarecorder de Android Volcado de salida reflejada
- Cómo silenciar el "pitido" por MediaRecorder.start ()?
(1) Etiqueta: AudioSource Texto: AudioRecord informó sobrecarga
(2) Etiqueta: AudioFlinger Texto: RecordThread: buffer overflow
Aquí está el código:
MediaRecorder recorder = new MediaRecorder(); recorder.setAudioChannels(2); recorder.setAudioSource(MediaRecorder.AudioSource.MIC); recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); recorder.setAudioSamplingRate(48000); // if not specified, defaults to 8kHz, if specified 44.1 or 48 kHz, lots of noise recorder.setOutputFile("test.m4a"); try { recorder.prepare(); recorder.start(); } catch (IOException ioe) { Log.e(TAG, "IOException", ioe); } catch (IllegalStateException ise) { Log.e(TAG, "IllegalStateException", ise); } catch (Exception e) { Log.e(TAG, "Exception", e); }
Cualquier ayuda es muy apreciada.
- Android MediaRecorder produce video corrupto con líneas verdes
- Interrumpir la grabación de medios mediante programación. Camera.apk de samsung galaxy tiene `this.mMediaRecorder.pause ();` no funciona en mi código
- MediaRecorder - setOrientationHint () excepción / error
- Problemas con MediaRecorder al iniciar la captura de vídeo en android
- Error al iniciar MediaRecorder: -38
- Android MediaRecorder setCaptureRate () y velocidad de reproducción de vídeo
- Grabar audio con MediaRecorder y reproducir simultaniosamente con MediaPlayer
- Problema con android MediaRecorder setVideoSize ()
Puede configurar SamplingRate (como lo ha hecho) y EncodingBitRate, que ha omitido.
He podido lograr grabaciones de muy alta calidad usando lo siguiente:
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.HE_AAC); mRecorder.setAudioSamplingRate(48000); mRecorder.setAudioEncodingBitRate(384000);
Esto codificará con 8 bits por muestra, que es probablemente más allá de la calidad disponible del micrófono en la mayoría de los dispositivos.
Después de una larga investigación y trata, esta es la mejor solución de trabajo que hice:
mRecorder = new MediaRecorder(); mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); mRecorder.setAudioEncodingBitRate(384000); mRecorder.setAudioSamplingRate(44100);
- Firebase Storage – StorageReference.getFile () se bloquea cuando el dispositivo está desconectado
- Modificar clase en jar: android build failed