MediaRecorder在Droid X2上录制了错误的音频文件

时间:2012-08-14 14:29:21

标签: android android-mediaplayer android-mediarecorder

我正在尝试在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上会坏吗?

1 个答案:

答案 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();