android:在模拟器上使用MediaPlayer录制音频

时间:2012-01-03 11:09:48

标签: android android-emulator audio-recording mediarecorder

我正在尝试使用以下代码从Android模拟器上的麦克风录制音频:

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类,结果是拖动音频。

感谢。

1 个答案:

答案 0 :(得分:1)

我一直在为此工作并找到解决方案,请尝试使用以下代码:

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

这在某种程度上是有效的。希望它可以帮助你:)