2012-06-29 16 views
17

Actualmente tengo un audio PCM en forma de una matriz de bytes. El formato está firmado 16 bit little endian. Me gustaría convertir esto a algún formato jugable en Android, preferiblemente la versión 3.2 o superior. ¿Alguien tiene sugerencias sobre cómo se puede hacer esto? Hice algunas investigaciones e intenté lo siguiente a continuación, pero ninguna tuvo éxito. Sería muy apreciado si alguien puede sugerir una mejor manera o indicar dónde me he equivocado.PCM Raw Bytes [] Para audio en Android

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 he intentado escribir los datos de PCM en un archivo de onda, pero estoy teniendo problemas para obtener toda la información de cabecera wav necesaria.

También he intentado utilizar la clase AudioTrack ofrecida por Android, para reproducir los datos de PCM. Sin embargo, 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 sería apreciada.

+0

actualizó mi respuesta –

Respuesta

19

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

Esta clase parece que tiene exactamente lo que necesita!

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

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

EDITAR

Cambiar la corriente a AudioManager.STREAM_MUSIC

+0

Gracias por pedirme que corrija la transmisión. Esto contribuyó a corregir el error. – ShannonS

+6

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

17

La pregunta es si desea reproducir muestras PCM que recibe de alguna fuente directamente en la aplicación para Android o si tiene algunos archivos externos es necesario convertir. En el primer caso siga el camino como lo describió Jack57. Es realmente fácil e incluso puede agregar marcadores para tener un tiempo preciso.

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(); 

continuación, llamar al método de escritura en un ciclo:

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

En el segundo caso, sólo tiene que utilizar algún editor de audio libre: http://audacity.sourceforge.net/download/. Puede almacenar muestras PCM como un archivo .txt, ábralo en el editor y guárdelo en el formato que necesite ...

+0

Gracias por elaborar. Esto me ayudó a solucionar el error. – ShannonS

Cuestiones relacionadas