AudioRecord problems with non-HTC devices

Posted by Marc on Stack Overflow See other posts from Stack Overflow or by Marc
Published on 2010-06-10T18:57:20Z Indexed on 2010/06/10 19:02 UTC
Read the original article Hit count: 279

I'm having troubles using AudioRecord.

An example using some of the code derived from the splmeter project:

private static final int FREQUENCY = 8000;
private static final int CHANNEL = AudioFormat.CHANNEL_CONFIGURATION_MONO;
private static final int ENCODING = AudioFormat.ENCODING_PCM_16BIT;
private int BUFFSIZE = 50;
private AudioRecord recordInstance = null;

...

android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);
recordInstance = new AudioRecord(MediaRecorder.AudioSource.MIC, FREQUENCY, CHANNEL, ENCODING, 8000);
recordInstance.startRecording();
short[] tempBuffer = new short[BUFFSIZE];
int retval = 0;

while (this.isRunning) {
   for (int i = 0; i < BUFFSIZE - 1; i++) {
      tempBuffer[i] = 0;
   }

   retval = recordInstance.read(tempBuffer, 0, BUFFSIZE);
   ... // process the data
}

This works on the HTC Dream and the HTC Magic perfectly without any log warnings/errors, but causes problems on the emulators and Nexus One device.

On the Nexus one, it simply never returns useful data. I cannot provide any other useful information as I'm having a remote friend do the testing.

On the emulators (Android 1.5, 2.1 and 2.2), I get weird errors from the AudioFlinger and Buffer overflows with the AudioRecordThread. I also get a major slowdown in UI responsiveness (even though the recording takes place in a separate thread than the UI).

Is there something apparent that I'm doing incorrectly? Do I have to do anything special for the Nexus One hardware?

© Stack Overflow or respective owner

Related posts about android

Related posts about android-emulator