For some reason, it’s really had to encode audio in Android. Is it the patents? Is it that the Android developers didn’t think it was important? I didn’t think I would ever have to write C code at Astrid, much less native code for Android.
Introducing the Android AAC Encoder project on github.
The API’s pretty simple:
File dir = getFilesDir(); String output = dir.toString() + "/audio.aac"; AACEncoder encoder = new AACEncoder(); // bitrate, channels, sample rate, bits per sample, output file name encoder.init(64000, 1, 16000, 16, output); // pass in some audio data byte input = new byte; for(int i = 0; i < input.length; i++) input[i] = (byte) Math.round(255 * Math.sin(i * 1.0 / 10)); // can be called as many times as you want encoder.encode(input); encoder.uninit();
Good times. I actually thought JNI was pretty well done, for the most part. Android’s Android.mk make files are pretty confusing though, but I was able to muddle through that by shoving all of my .c files in one folder and .h files in another. All in a day’s work here in Astridville.
Speaking of Astridville, we recently invented a new variant on ping pong. That’s Andrew and Sam playing “well pong”: