2012-08-16 32 views
14

Estoy construyendo una aplicación para Android, que tiene la función de capturar sonido a través del micrófono y reproducirlo a través de auriculares. Para esto, he usado "AudioRecord" y "AudioTrack". Lo que sigue es una parte de código que estoy usando, (sólo para la comprensión)Android: grabar sonido en formato mp3

mInBufferSize = AudioRecord.getMinBufferSize(mSampleRate, 
      AudioFormat.CHANNEL_CONFIGURATION_MONO, mFormat); 
mOutBufferSize = AudioTrack.getMinBufferSize(mSampleRate, 
      AudioFormat.CHANNEL_CONFIGURATION_MONO, mFormat); 
mAudioInput = new AudioRecord(MediaRecorder.AudioSource.MIC, 
      mSampleRate, AudioFormat.CHANNEL_CONFIGURATION_MONO, mFormat, 
      mInBufferSize); 
mAudioOutput = new AudioTrack(AudioManager.STREAM_MUSIC, mSampleRate, 
      AudioFormat.CHANNEL_CONFIGURATION_MONO, mFormat, 
      mOutBufferSize, AudioTrack.MODE_STREAM); 

Pero el problema principal es que quiero grabar el sonido entrante en formato mp3? Por favor, ayúdame en esto, realmente apreciaré ...

Gracias de antemano

Respuesta

10

Aquí en Git se puede encontrar el código fuente para Mp3 grabadora de voz de la muestra Para Android.

Checkout este código fuente.

+0

Eso es realmente buena respuesta y estoy dispuesto a aceptarlo, pero el problema es que afecta a "AudioTrack", quiero decir después de usar este código, no soy capaz de escuchar sonido en los auriculares. ¿Pueden estos dos procesos estar en paralelo ?, ¿como reproducir sonido usando "AudioTrack" y grabarlo en mp3? gracias por la respuesta – user609239

+0

Puede usar la Media Player Class para escucharla en auriculares. –

+0

Sí, pero MediaPlayer es útil después de la finalización de la grabación, pero en este caso el requisito es reproducir el sonido y grabarlo simulatáneamente – user609239

0

Este es un trabajo para mí

outputFile = Environment.getExternalStorageDirectory() 
      .getAbsolutePath() + "/myrecording.mp3"; 
    myAudioRecorder = new MediaRecorder(); 
    myAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
    myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
    myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB); 
    myAudioRecorder.setOutputFile(outputFile);` 

myAudioRecorder.prepare(); myAudioRecorder.start(); `

+2

Esto no graba mp3, solo la extensión del archivo será mo3, no el formato de archivo. –

34

Hay un problema para guardar archivos .mp3 utilizando MediaRecorder. Así es como:

recorder = new MediaRecorder(); 
recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
recorder.setOutputFile(Environment.getExternalStorageDirectory() 
     .getAbsolutePath() + "/myrecording.mp3"); 
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); 
recorder.prepare(); 
recorder.start(); 

La parte importante aquí es la setOuputFormat y la setAudioEncoder. Aparentemente MediaRecorder graba archivos MP3 reproducibles si usa MediaRecorder.OutputFormat.MPEG_4 y MediaRecorder.AudioEncoder.AAC juntos. Espero que esto ayude a alguien.

Por supuesto, si usted prefiere utilizar la clase Audiorecorder creo que el Chirag código fuente vinculada a continuación debería funcionar bien - https://github.com/yhirano/Mp3VoiceRecorderSampleForAndroid (aunque puede que tenga que traducir algunos de ellos del Japonés al Inglés)

Editar: Como Bruno, y algunos otros señalaron en los comentarios, esto hace no codificar el archivo en MP3. La codificación sigue siendo AAC. Sin embargo, si intentas reproducir un sonido, guardado usando una extensión .mp3 a través del código anterior, seguirá reproduciéndose sin problemas porque la mayoría de los reproductores multimedia son lo suficientemente inteligentes como para detectar la codificación real.

+0

¡Me sorprende que la mayoría de los desarrolladores no se den cuenta de lo fácil que es grabar mp3! ¡Gracias! – nat101

+0

Uso de AudioEnconder.ACC tiene algunos efectos extraños en algunos dispositivos ... por alguna razón fue grabar audio rápidamente en un Lenovo Tab3 con Android 6.0. Terminé usando MediaRecorder.AudioEncoder.AMR_NB y funcionó bien para mí. – velval

+2

lo siento, pero esto NO produce archivos codificados en MP3. todavía están codificados (en mi teléfono galaxy s6) –

0

Configure su outputformat de la grabadora como MediaRecorder.OutputFormat.DEFAULT. Lo he usado y el archivo de audio resultante es un mp3.

+0

Hola. Intenté esto y 'adb pull'ed el resultado a mi host de desarrollo de Linux. El archivo en el archivo resultante da: /home/sjs/AudioDemo.mp3: ISO Media, sistema MPEG v4, 3GPP. es decir, el archivo es un archivo mp4. El dispositivo era un Nexus 7 con Android 6.0.1. Lo siento y gracias. –

0

Esto funcionó para mí

mediaRecorder = new MediaRecorder(); 
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); 
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); 
mediaRecorder.setOutputFile(Environment.getExternalStorageDirectory() 
    .getAbsolutePath() + "/record.mp3"); 
mediaRecorder.prepare(); 
mediaRecorder.start(); 
Cuestiones relacionadas