我正在尝试在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上会坏吗?
答案 0 :(得分:0)
在这里找到答案:MediaPlayer cant play audio files from program data folder?
问题不是录音,而是我设置MediaPlayer数据源的方式。虽然我不知道为什么股票媒体播放器应用程序不会播放该文件...也许这是一个许可的事情。这是我用来播放文件的代码:
mPlayer = new MediaPlayer();
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mPlayer.setDataSource(fileName);
mPlayer.prepare();
mPlayer.start();
如果文件存储在外部文件目录中,则以下代码将起作用:
mPlayer = new MediaPlayer();
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mPlayer.setDataSource((new FileInputStream(fileName)).getFD());
mPlayer.prepare();
mPlayer.start();