android:在emulator上使用MediaPlayer录制音频

android:在emulator上使用MediaPlayer录制音频,android,android-emulator,audio-recording,mediarecorder,Android,Android Emulator,Audio Recording,Mediarecorder,我正在尝试使用以下代码在Android emulator上录制麦克风中的音频: recorder = new MediaRecorder(); recorder.setAudioSource(MediaRecorder.AudioSource.MIC); recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB

我正在尝试使用以下代码在Android emulator上录制麦克风中的音频:

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();
停止音频的代码如下:

recorder.stop();
recorder.reset();
recorder.release();
录制过程工作正常,但产生的音频失真。当我录制一段持续60秒的音频并播放它时,它的持续时间显示为120秒。测量不精确,但这只是给你一个想法

只有AMR_NB编码器在我的模拟器上工作。我尝试过不同的输出格式,但结果总是一样的

这是模拟器的限制还是我在这里做错了什么

编辑1: 我也尝试过AudioRecord类,结果也是一样的


谢谢。

我一直在为同样的问题工作,并找到了解决方案,请尝试使用以下代码:

    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();
        }
    }

这很有效。希望它能帮助你:)

谢谢你的发帖;不过我运气不好。我已经添加了“MediaRecorder.getAudioSourceMax();”行,但是音频仍然会拖拽。仅供参考,我正在用Android 4.0.3、API级别15、mac上的ARM模拟器来尝试这一点。