android audio wav pcm audiorecord

Creación de un archivo WAV a partir de datos PCM sin procesar con el SDK de Android



audio audiorecord (3)

Intento utilizar la clase AudioRecord para grabar un archivo WAV. El problema es que solo proporciona los datos de PCM en bruto, y si los escribo en un archivo, no hay información de encabezado, por lo que no se reproducirá en ningún reproductor de medios. ¿Cómo puedo crear un archivo WAV a partir de estos datos sin procesar?

O, como alternativa, ¿hay alguna otra manera de grabar sonido en Android en un archivo WAV (o, alternativamente, MP3)?

Ah, y sé que MediaRecorder no se puede usar porque no admite formatos WAV o MP3.


Compruebe MediaRecorder.setOutputFormat (), puede establecer diferentes formatos de contenedor para su grabación; hay MediaRecorder.OutputFormat.MPEG_4 y MediaRecorder.OutputFormat.THREE_GPP; el único formato permitido a través de RAW es setAudioEncoder (MediaRecorder.AudioEncoder.AMR_NB);

Lo sentimos, pero MP3 no está disponible. ¿Realmente necesitas mp3 para grabar? WAV en el lado opuesto al MP3 es un contenedor , no un formato ; WAV puede ser cualquier tipo de formato de codificación.

Siempre puede agregar un encabezado WAV RIFF delante de los datos pcm sin formato (siempre que sepa exactamente el formato). Compruebe aquí cómo debe ser: http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/WAVE.html


Es posible que desee utilizar la clase mediarecord


OK, tengo esto resuelto. Esta publicación fue crucial para ayudarme: http://computermusicblog.com/blog/2008/08/29/reading-and-writing-wav-files-in-java

Básicamente, utilicé ByteArrayOutputStream para escribir los datos de PCM en bruto de AudioRecord, lo que me permite obtener la matriz de bytes y su tamaño cuando finaliza el proceso. Luego puedo usar esa información junto con las configuraciones SampleRate, BitRate y Stereo / Mono para crear el encabezado WAV según el enlace de arriba. ¡El archivo resultante funciona perfectamente!