我正在尝试使用 Droid X2 上的 MediaRecorder 录制音频,但遇到了问题。MediaRecorder 似乎可以很好地准备并开始录制,但是当我停止录制并尝试收听生成的文件时,播放立即停止。即使我尝试在标准媒体播放器应用程序中打开音频文件,它也会立即停止。
这是我用来记录的代码:
mCurrentRecordingFilePath = mContext.getExternalFilesDir(null).getAbsolutePath() + File.separator + fileName;
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
mRecorder.setOutputFile(mCurrentRecordingFilePath);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
// mRecorder.setAudioEncodingBitRate(16);
// mRecorder.setAudioSamplingRate(44100);
try {
mRecorder.prepare();
mIsPrepared = true;
} catch (IOException e) {
Log.e("Test", "MediaRecorder prepare() failed");
e.printStackTrace();
}
if (mRecorder != null && mIsPrepared) {
mRecorder.start();
mIsRecording = true;
Log.i("Test", "Started audio capture: " + mCurrentRecordingFilePath);
}
我注释掉了这个setAudioEncodingBitRate()
电话,因为它导致prepare()
失败,为了安全起见,我也注释掉了setAudioSamplingRate()
。我已经尝试了可用的输出格式和音频编码器的每种组合,结果始终相同。我没有例外,并且创建了一个非空文件,但它不会正确播放。
不确定它是否有助于诊断,但这是我用来停止记录的代码:
if (mRecorder != null && mIsRecording) {
mRecorder.stop();
mRecorder.release();
mRecorder = null;
mIsPrepared = false;
mIsRecording = false;
Log.i("Test", "Stopped audio capture");
}
录制代码在 Galaxy Nexus、Nexus S、EVO 4G 和 Galaxy SII 上运行良好。知道为什么我的音频文件在 Droid X2 上会不好吗?