1

我正在尝试使用 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 上会不好吗?

4

1 回答 1

0

在这里找到答案:MediaPlayer can't 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();
于 2012-08-14T19:24:50.410 回答