Creating a WAV file from raw PCM data using the Android SDK

user496854 picture user496854 · Jan 24, 2011 · Viewed 29.4k times · Source

I'm trying to use the AudioRecord class to record a WAV file. The problem is that it only supplies the raw PCM data, and if I write it to a file, there is no header information, so it will not play in any media player. How can I create a WAV file from this raw data?

Or alternatively, is there any other way to record sound in Android to a WAV file (or, alternatively MP3)?

Oh, and I know that MediaRecorder can'y be used because it doesn't support either WAV or MP3 formats.

Answer

user496854 picture user496854 · Jan 24, 2011

OK, I've got this figured out. This post was crucial in helping me: http://computermusicblog.com/blog/2008/08/29/reading-and-writing-wav-files-in-java

Basically, I used ByteArrayOutputStream to write the raw PCM data from AudioRecord, which then lets me get the byte array and its size when the process is done. I can then use that data in conjunction with the SampleRate, BitRate, and Stereo/Mono settings to create the WAV header as per the link above. The resulting file works perfectly!