2010-10-16 13 views
6

Tengo un problema cuando intento grabar y reproducir el archivo que acaba de grabar. Puedo grabar y reproducir el sonido, pero la calidad apesta. No solo es malo es realmente difícil de escuchar y suena un poco como una voz generada por computadora. Uso el andriod SDK-emulator. El código que configura la grabación se ve así;Mala calidad de sonido al grabar/reproducir sonidos - Android SDK

MediaRecorder recorder = new MediaRecorder(); 
recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
recorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR); 
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
recorder.setOutputFile(path); 
recorder.prepare(); 
recorder.start(); 

Y el código que reproduce el archivo se ve así más adelante;

MediaPlayer mp = new MediaPlayer(); 
mp.reset(); 
mp.setDataSource(path); 
mp.prepare(); 
mp.start(); 

No sé qué parte que hace que el sonido de archivos de audio muy malo o si es sólo el emulador que hace que sea malo y que funcionaría en un teléfono real.

+0

Tengo un archivo .WAV que suena bien en mi PC, pero suena como el infierno cuando se reproduce en Android. ¿Alguna vez resolvió su problema? Estoy usando exactamente la misma configuración de reproducción que describiste arriba. –

Respuesta

1

Estás hablando de dos objetos diferentes, AudioRecorder y MediaRecorder.

0

AudioRecord toma una variedad de argumentos que podrían influir en la calidad de la grabación.

Prueba a poner esto en el constructor:

  • Fuente de audio: MIC
  • Frecuencia de muestreo: 16000
  • Número de canales: CHANNEL_CONFIGURATION_MONO
  • Formato: ENCODING_PCM_16BIT
  • tamaño de búfer: 16000 * 30 (30 segundos de memoria intermedia)

Ejemplo de código:

recorder = new AudioRecord(
          MediaRecorder.AudioSource.MIC, 
          16000, 
          AudioFormat.CHANNEL_CONFIGURATION_MONO, 
          AudioFormat.ENCODING_PCM_16BIT, 
          16000*30); 
+0

Muchas gracias, pero tengo un problema con esto, de acuerdo con; http://developer.android.com/reference/android/media/MediaRecorder.html # MediaRecorder() debe haber funciones para esto, por ejemplo "setAudioSamplingRate (int samplingRate)", pero no puedo usar eso con mi grabadora, simplemente no existe ... ¿Puedes dar un código-ejemplo de cómo defines ¿esta? ¡Muchas gracias! – Nick3

+0

La frecuencia de muestreo es algo que debería establecerse cuando inicializó por primera vez el grabador. Todos los parámetros en mi respuesta deben establecerse en el constructor y luego dejarlos solos mientras dure su sesión de grabación. –

4

Prueba estas

recorder = new MediaRecorder(); 
recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);  
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); 
recorder.setAudioChannels(2); 
recorder.setAudioEncodingBitRate(128); 
recorder.setAudioSamplingRate(44100); 

En caso que si usted encuentra este accidente código en los dispositivos Android de gama baja pruebe a desinstalar y setAudioChannels setAudioSamplingRate.

+0

recorder.setAudioSamplingRate (44100); es más que suficiente para hacer que la voz sea buena en el código anterior –

2

No es solo el emulador; suena mal en mi Nexus 10, también.

De forma similar a la respuesta de Mohit marwal, puede establecer la frecuencia de muestreo y la velocidad de bits. 44100 es la tasa de muestreo de calidad estándar de CD. La mayoría de las descargas de audio comerciales están codificadas a al menos 128000 bits por segundo (no kilobits por segundo, como se muestra en la respuesta de Mohit). Entonces esos serían buenos valores iniciales. Además, solo debe usar un canal para reducir el tamaño del archivo a la mitad, a menos que tenga un micrófono estéreo y necesite grabar en estéreo.

recorder.setAudioChannels(1); 
recorder.setAudioEncodingBitRate(128000); 
recorder.setAudioSamplingRate(44100); 

Cuando configuré estos valores, el tamaño y la calidad del archivo aumentaron, pero aún no en el nivel que preferiría. Quizás el ruido restante provenga de un micrófono defectuoso en mi dispositivo, pero no lo he probado con un micrófono externo ni comparé otros dispositivos.

Cuestiones relacionadas