Just a quick example:
class AudioRecorder
{
int frequency = 8000;
boolean keepGoing = false;
android.media.AudioRecord audioRecord;
int bufferSize;
public short[] buffer;
PApplet sketch;
java.lang.reflect.Method updateBufferMethod;
public AudioRecorder(PApplet _sketch) {
sketch = _sketch;
bufferSize = android.media.AudioRecord.getMinBufferSize(
frequency,
android.media.AudioFormat.CHANNEL_CONFIGURATION_MONO,
android.media.AudioFormat.ENCODING_PCM_16BIT);
audioRecord = new android.media.AudioRecord(
android.media.MediaRecorder.AudioSource.MIC,
frequency,
android.media.AudioFormat.CHANNEL_CONFIGURATION_MONO,
android.media.AudioFormat.ENCODING_PCM_16BIT,
bufferSize);
buffer = new short[bufferSize];
// check to see if the host applet implements
// public void updateBufferMethod(short[] buffer)
try {
updateBufferMethod = sketch.getClass().getMethod("updateBuffer", new Class[] { AudioRecorder.class });
} catch (Exception e) {
// just ignore
}
}
public void stop() {
keepGoing = false;
}
public void record() {
keepGoing = true;
audioRecord.startRecording();
new Thread(new Runnable() {
public void run() {
while (keepGoing) {
audioRecord.read(buffer, 0, bufferSize);
// Send to Processing sketch
if (updateBufferMethod != null) {
try {
updateBufferMethod.invoke(sketch, new Object[] { this });
} catch (Exception e) {
System.err.println("Disabling updateBuffer() because of an error.");
e.printStackTrace();
updateBufferMethod = null;
}
}
}
audioRecord.stop();
}
}).start();
}
short[] getBuffer() {
return buffer;
}
}
Main Sketch
AudioRecorder ar;
boolean recording = false;
public short[] buffer;
void setup() {
ar = new AudioRecorder(this);
}
void draw() {
}
void mousePressed() {
if (recording == false) {
println("Going to record");
ar.record();
recording = true;
} else {
println("Stop recording");
ar.stop();
buffer = ar.getBuffer();
for (int i = 0; i < buffer.length; i++) {
println(buffer[i]);
}
}
}
/*
void updateBuffer(AudioRecorder recorder) {
println("update buffer");
for (int i = 0; i < recorder.buffer.length; i++) {
println(recorder.buffer[i]);
}
}
*/