PCM Raw Bytes [] a audio en Android

Actualmente tengo un audio PCM en forma de matriz de bytes. El formato está firmado Little Endian de 16 bits. Me gustaría convertir esto a algún formato reproducible en Android, preferiblemente la versión 3.2 o superior. ¿Alguien tiene sugerencias sobre cómo se puede hacer esto? Investigué un poco y probé lo siguiente a continuación, pero ninguno tuvo éxito. Sería muy apreciado si alguien puede sugerir una mejor manera o indicar dónde me he equivocado.

He intentado crear un AudioFormat con la configuración de audio correcta, sin embargo, Android no es compatible con la biblioteca javax.sound.sampled.

También intenté escribir los datos PCM en un archivo de onda, pero tengo problemas para obtener toda la información necesaria del encabezado wav.

También he intentado usar la clase AudioTrack que ofrece Android para reproducir los datos PCM. Sin embargo, parece que no puedo escuchar ningún sonido. Aquí está mi método:

    public void playback(){
         try{
              AudioTrack audioTrack = new  AudioTrack(AudioManager.STREAM_VOICE_CALL, 8000, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, 500000, AudioTrack.MODE_STATIC);
              audioTrack.write(audio, 0, 500000);

      } catch(Throwable t){
        Log.d("Audio","Playback Failed");
    }
}

Cualquier sugerencia sera apreciada.

preguntado el 29 de junio de 12 a las 20:06

2 Respuestas

http://developer.android.com/reference/android/media/AudioTrack.html

¡Parece que esta clase tiene exactamente lo que necesitas!

write(byte[] audioData, int offsetInBytes, int sizeInBytes)

Escribe los datos de audio en el hardware de audio para su reproducción.

EDITAR

Cambia tu transmisión a AudioManager.STREAM_MUSIC

Respondido el 29 de junio de 12 a las 20:06

Gracias por indicarme que corrija el flujo. Esto contribuyó a corregir el error. - ShannonS

Seleccione una respuesta correcta, le ayudará a recibir más respuestas en el futuro. - jack satriano

¿Podemos escribir esto en un archivo y almacenarlo? - Feroz Siddiquí

¿Cómo puede esto escribirlo en un archivo? - Feroz Siddiquí

La pregunta es si desea reproducir muestras PCM que recibe de alguna fuente directamente en la aplicación de Android o si tiene algunos archivos externos que necesita convertir. En el primer caso, sigue el camino descrito por jack57. Es realmente fácil e incluso puedes agregar marcadores para tener una sincronización precisa.

int bufferSize = AudioTrack.getMinBufferSize(sampleRate, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT);

AudioTrack mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize, AudioTrack.MODE_STREAM);

mAudioTrack.play();

luego llame al método de escritura en un ciclo:

mAudioTrack.write(buffer, 0, buffer.length);

En el segundo caso, solo use algún editor de audio gratuito: http://audacity.sourceforge.net/download/. Puede almacenar muestras PCM como un archivo .txt, abrirlo en el editor y guardarlo en el formato que necesite...

contestado el 12 de mayo de 16 a las 15:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.