我试图在Droid X2上使用MediaRecorder录制音频,而且我遇到了问题。 MediaRecorder似乎准备并开始录制就好了,但是当我停止录制并尝试收听制作的文件时,立即停止播放。即使我尝试打开标准媒体播放器应用程序中的音频文件,它也会立即停止播放。MediaRecorder录制糟糕的音频文件Droid X2
这里是我用来记录代码:我注释掉setAudioEncodingBitRate()
调用,因为它是造成prepare()
失败,而只是为了安全起见,我还评论了setAudioSamplingRate()
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);
}
。我已经尝试了可用的输出格式和音频编码器的每种组合,并且结果始终相同。我没有得到任何例外,并且创建了一个非空的文件,但它不能正常播放。
不知道这是否会帮助诊断,但这里是我用来停止记录代码:
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上不好?
如果指定'OutputFormat.THREE_GPP'什么,'AudioEncoder.AMR_NB',一个频道,8000Hz?这仍然失败吗?你可以在你提到的任何其他手机上播放结果文件(由Droid X2录制)吗? – Michael 2012-08-14 18:07:46
我能够使用'OutputFormat.THREE_GPP'和'AudioEncoder.AMR_NB'在我的Mac上播放该文件。我还发现,如果将路径设置为SD卡根目录而不是外部文件目录,则可以在X2上播放该文件。我真的想避免写在文件目录之外,因为我想在卸载应用程序时删除音频文件。 – BigFwoosh 2012-08-14 18:28:16
在这里找到答案:http://stackoverflow.com/questions/3773262/mediaplayer-cant-play-audio-files-from-program-data-folder 问题不是录音,这是我的方式设置MediaPlayer的数据源。虽然我不知道为什么股票媒体播放器应用程序不会播放该文件...也许这是一个许可的事情。谢谢您的帮助! – BigFwoosh 2012-08-14 19:21:46