3

I am trying to record audio from the microphone on the Android emulator with this code:

recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile(Environment.getExternalStorageDirectory() + "/test/test.3gp");
try {
    recorder.prepare();
}
catch (IOException io) {
    Log.v(LOG_TAG, "Could not prepare the audio " + io.getMessage());
}
recorder.start();

For stopping the audio, this is the code:

recorder.stop();
recorder.reset();
recorder.release();

The recording process works fine but the resulting audio that is distorted. When I record an audio for 60 seconds duration and play it, it's duration is being shown as 120 seconds. The measurement is not exact but the this is just to give you an idea.

Only the AMR_NB encoder is working on my emulator. I have tried different output formats but the result is always the same.

Is it a limitation of the emulator or am I doing something wrong here?

Edit 1: I have tried the AudioRecord class too and the result is the same dragging audio.

Thanks.

Srisa
  • 967
  • 1
  • 7
  • 17

1 Answers1

0

I have been working for the same and found the solution, Try using the following code:

    private void startRecording()
    {

        this.recorder = new MediaRecorder();
        this.recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        this.recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        this.recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        MediaRecorder.getAudioSourceMax();
        this.recorder.setOutputFile(this.getFilename());
        this.recorder.setOnErrorListener(this.errorListener);
        this.recorder.setOnInfoListener(this.infoListener);

        try
        {
            this.recorder.prepare();
            this.recorder.start();
        } catch (final IllegalStateException e)
        {
            e.printStackTrace();
        } catch (final IOException e)
        {
            e.printStackTrace();
        }
    }

This is working perfactly. Hope it helps you :)

Shraddha
  • 1,052
  • 11
  • 22
  • Thanks for posting; no luck for me though. I have added the "MediaRecorder.getAudioSourceMax();" line, but the audio still drags. FYI, I am trying this with Android 4.0.3, API Level 15, ARM-emulator on mac. – Srisa Apr 23 '12 at 13:48