I currently have a PCM audio in the form of a byte array. The format is signed 16 bit little endian. I would like to convert this to some playable format on the Android, preferably version 3.2 or higher. Does anyone have suggestions on how this can be done? I have done some research and tried the following below, but none were successful. It would be much appreciated if anyone can suggest a better way or indicate where I have gone wrong.
I have tried creating an AudioFormat with the correct audio settings, however Android does not support the javax.sound.sampled library.
I have also tried writing the PCM data into a wave file, but I am running into trouble getting all of the necessary wav header information.
I have also tried using the AudioTrack class offered by the Android, to play the PCM data. However, I can't seem to hear any sound. Here is my method:
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");
}
}
Any suggestions would be appreciated.
http://developer.android.com/reference/android/media/AudioTrack.html
This class looks like it has exactly what you need!
write(byte[] audioData, int offsetInBytes, int sizeInBytes)
Writes the audio data to the audio hardware for playback.
EDIT
Change your stream to AudioManager.STREAM_MUSIC