2011-09-06 16 views
6

He grabado voz con Android AudioRecord y me gustaría convertirlo a ogg vorbis ya que está libre de patentes. He intentado vorbis-java beta, pero parece que no funciona o cometo un error.Cómo codificar voz grabada a ogg vorbis?

Éstos son mi código:

int  frequency  = 44100; 
int  channel  = AudioFormat.CHANNEL_IN_STEREO; 
int  mAudioSource = MediaRecorder.AudioSource.MIC; 
int mAudioEncoder = AudioFormat.ENCODING_PCM_16BIT; 
try { 
      final File outputFile = new File(mOutputPath); 
      DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(outputFile))); 
      int bufferSize = AudioRecord.getMinBufferSize(frequency, channel, mAudioEncoder); 
      AudioRecord audioRecord = new AudioRecord(mAudioSource, frequency, channel, mAudioEncoder, bufferSize); 
      short[] buffer = new short[bufferSize]; 
      audioRecord.startRecording(); 
      while (isRecordStart) { 
       int bufferReadResult = audioRecord.read(buffer, 0, bufferSize); 
       for(int i = 0; i < bufferReadResult; i++) { 
        dos.writeShort(buffer[i]); 
       } 
      } 
      audioRecord.stop(); 
      dos.close(); 
     } 
     catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 
     catch (IOException e) { 
      e.printStackTrace(); 
     } 

puedo guardar en un archivo con la extensión wav y ejemplo de uso de Vorbis-java para codificar, pero la producción no es más que zzz .......

¿Cómo codificar esto para ogg vorbis en android?

Respuesta

2

Parece que escribe datos de audio en bruto en un archivo en lugar de formato wav. El formato Wav tiene encabezados, no solo datos de audio.

Nota: No utilice Vorbis-java, pero compila a partir de fuentes libogg y libvorbis en http://www.xiph.org/downloads/

Uso Android NDK de recopilarlas para incrustar en el archivo apk.

Luego puede llamar al código nativo de su aplicación para codificar los datos de audio.

8

Creo que leí esta pregunta hace unas semanas y también estaba muy frustrado. Terminé escribiendo el envoltorio ndk necesario para usar las cosas de Xiph.org. La única pega es que para que funcione bien, tuve que habilitar las instrucciones de punto flotante. Los emuladores no tienen punto flotante, por lo que bloqueará el emulador. Sin embargo, ejecútelo en casi cualquier teléfono, y estará listo para continuar. Está diseñado para emular un FileInputStream y FileOutputStream para interactuar con los archivos vorbis.

https://github.com/nwertzberger/libogg-vorbis-android

+0

Hola señor, parece como de 18 API esto es apoyado de forma nativa. Puede usted por favor asesorarme sobre mi tema aquí - Estoy pegado por un par de semanas - https://stackoverflow.com/q/44324931/1828637 – Noitidart

+1

¡Excelente! Me gustaría ir con las cosas nativas. – Rannick

+0

Hola, @Rannick eliminé ese tema, pero este es el mismo problema exacto, otro usuario lo expresó con más claridad. ¿Podrían ayudarnos a descubrir por qué no está funcionando grabar ogg? - https://stackoverflow.com/questions/44480762/mediarecorder -output-format-and-encoding-causing-crash – Noitidart