android:在模拟器上使用 MediaPlayer 录制音频
Posted
技术标签:
【中文标题】android:在模拟器上使用 MediaPlayer 录制音频【英文标题】:android: record audio with MediaPlayer on emulator 【发布时间】:2012-01-03 11:09:48 【问题描述】:我正在尝试使用以下代码从 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】:我一直在为此工作并找到了解决方案,请尝试使用以下代码:
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 模拟器。以上是关于android:在模拟器上使用 MediaPlayer 录制音频的主要内容,如果未能解决你的问题,请参考以下文章
Android开源项目:GifView——Android显示GIF动画
android:在模拟器上使用 MediaPlayer 录制音频