我正在尝试使用以下代码从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类,结果是拖动音频。
感谢。
答案 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();
}
}
这在某种程度上是有效的。希望它可以帮助你:)